0
توجه: بعلت محدودیتهای صفحات وب، برخی از ویژگی‌های این کتاب، مانند فرمول‌ها و جداول، بصورت صحیح در مرورگرهای اینترنتی نمایش داده نمی‌شوند. برای مشاهده دقیق این موارد باید فایل PDF را مطالعه فرمایید. در ضمن، این فایل کامل نیست و تنها شامل گزیده‌هایی از متن کتاب است. متن اصلی حدود 750 صفحه، و به فرمت pdf است و فرمت‌بندی صفحات و فانت‌ها در آن حفظ شده و به راحتی روی دستگاه‌های موبایل قابل خواندن است. برای دریافت فایل کامل به این آدرس مراجعه کنید. برای مشاهده فهرست محتویات کامل کتاب به این آدرس مراجعه کنید.

نقل مطالب این سایت در رسانه‌های اینترنتی یا چاپی فقط با ذکر آدرس منبع مجاز است.
برای تنظیم بزرگنمایی حروف از دکمه‌های زیر استفاده کنید.
            


خلاصه‌ای از بخش‌های کتاب

C# 9 و  .NET 5

زبانی برای برنامه‌نویسی مدرنِ چندسکویی

پوشش دهنده آخرین نسخه زبانC#  (9.0)

تالیف مارک جی. پرایس

 

ترجمه کامران بزرگزاد ایمانی


 

مقدمه مترجم   1

مقدمه مؤلف... 1

چه موضوعاتی در این کتاب پوشش داده می‌شوند   2

آنچه برای یادگیری این کتاب به آن نیاز دارید   3

فصل 1. 3

به C# و .NET خوش آمدید!. 3

برپا کردن محیط برنامه‌نویسی.... 3

.NET.. 6

ساختن برنامه‌های کنسولی با استفاده از VSC   11

دانلود پاسخ سوالات از مخزن GitHub.. 12

جستجو برای کمک.... 13

تمرین‌ها و کاوش‌های بیشتر.. 15

خلاصه.. 16

فصل 2. 16

صحبت به زبان C#.. 16

مقدمه‌ای  بر C#... 16

فصل 3. 19

کنترل روند برنامه و تبدیل گونه‌ها. 19

انجام عملیات بر روی متغیرها. 19

فصل 4. 20

نوشتن، رفع‌اشکال، و آزمایش توابع.. 21

نوشتن توابع.. 21

فصل 5. 22

ساخت گونه‌های خودتان توسط برنامه‌نویسی-شیءگرا  22

برنامه نویسی شیء-گرا. 22

ساختن کتابخانه‌های کلاس...... 23

فصل 6. 24

پیاده‌سازی رابط‌ها (اینترفیس‌ها) و وراثت... 24

تشکیل یک کتابخانه کلاس و برنامه کنسولی     24

ساده کردن متدها. 25

فصل 7. 26

بسته‌ها و گونه‌های .NET.. 26

مقدمه‌ای بر .NET 5.. 26

فصل 8. 28

گونه‌های متداول در .NET.. 28

کار با اعداد.. 28

فصل 9. 30

فایل‌ها، جریان‌ها و سریال‌سازی... 30

سیستم‌فایلی.... 30

فصل 10. 31

محافظت از داده‌ها و برنامه‌ها. 31

فرهنگِ اصطلاحاتِ حفاظت از داده‌ها. 32

فصل 11. 33

کار با پایگاه‌های‌داده توسط Entity Framework Core. 33

پایگاه‌های داده نوین... 33

فصل 12. 34

پرس‌وجو و تغییر داده‌ها با استفاده از LINQ.. 34

نوشتن  پرس‌وجو‌های LINQ... 35

فصل 13. 35

بهبود سرعت و مقیاس‌پذیری برنامه‌ها توسط چندکارگی     35

پروسه‌ها، ریسه‌ها، و کارها. 35

نظارت بر روی سرعت برنامه و مصرفِ منابع   36

فصل 14. 36

معرفی برنامه‌های عملی C# و .NET.. 36

مدل‌های برنامه برای C# و .NET.. 36

فصل 15. 37

ساخت وب‌سایت‌ها با استفاده از صفحات ASP.NET Core Razor  37

برنامه‌نویسی وب.... 37

 


 

مقدمه مترجم

زبان C# و جایگاه آن

زبان C# نیاز به تعریف ندارد، زیرا خالق و پشتیبان آن شرکت مایکروسافت است. جدا از IBM و چند شرکت انگشت‌شمار دیگر، مایکروسافت اولین و پرسابقه‌ترین شرکت نرم‌افزاری جهان است که از اواخر دهه 70 میلادی مشغول تولید نرم‌افزار برای کامپیوترهای شخصی بوده است. این شرکت برای خیلی از زبان‌های برنامه‌نویسی مفسرها و یا کامپایلرهایی را تولید کرده، از جمله برای زبان‌های BASIC، C، C++، و همینطور Java. ولی زبان C# جزء اولین زبان‌هایی بود که خود این شرکت در سال 2001 اقدام به طراحی و توسعه آن کرد. از لحاظ نحوی، زبان C# جزء زبان‌های خانواده C بشمار می‌رود، زیرا بسیاری از ساختارهای آن شبیه زبان C یا C++ است. ولی تفاوتهای اساسی با آنها دارد، که مهمترین آن این است که آنها زبانهایی هستند که کُد منبع آنها باید مستقیماً به زبان ماشین ترجمه شود، ولی کُدهای منبع زبان C# باید ابتدا به یک زبان میانجی، و در مرحله بعد، برای اجراء به زبان ماشین ترجمه شوند. این زبان شباهت بسیاری به زبان Java دارد، و هدف اولیه آن هم رقابت با این زبان بود.

زبان C# ابتدا به چهارچوب .NET وابسته بود، و بدلیل اینکه .NET چهارچوبی بود که ابتدا برای سیستم عامل ویندوز طراحی شده بود، بکارگیری C# هم عمدتاً به ویندوز وابسته بود. ولی کم‌کم با ظهور نرم‌افزارهایی مانند مونو (Mono) و پیاده‌سازی .NET روی سیستم‌عامل‌های دیگر، کاربرد C# نیز گسترش یافت و تقریباً در اکثر سیستم‌عامل‌های کامپیوترهای شخصی و موبایل می‌توان از آن استفاده کرد.

کاربرد این زبان بی‌نظیر است و تقریباً در هر حوزه‌ای می‌توان از آن استفاده کرد؛ پیاده سازی برنامه‌های مبتنی بر بانک‌های داده، تولید برنامه‌ها و سرویس‌های وب، پردازش تصاویر، بازی‌ها، برنامه‌های علمی، و ... .

داشتن مستندات خوب و پشتیبانی کمپانی بزرگی مثل مایکروسافت (و به تازگی، پشتیبانی از سوی جوامع منبع باز)، از ویژگی‌های خوب این زبان است.

اگر از ویندوز استفاده می‌کنید، C# یکی از گزینه‌های اصلی برنامه‌نویسی روی این سیستم عامل است.

درباره این کتاب

این کتاب زبان C# را از سطوح ابتدایی آموزش می‌دهد، و یادگیری آن هیچ پیش‌نیازی جزء اصول مقدماتی کامپیوتر ندارد.

در مقایسه با خیلی از کتابهای پرحجم مشابه، این کتاب برای یادگیری اصول C#  طراحی شده، و از دنبال کردن پروژه‌های طولانی و گیج کننده پرهیز می‌کند، و مثال‌های آن کوتاه و مفید هستند. با یک برنامه منظم روزانه، براحتی می‌توان این کتاب را در عرض 3 هفته تمام کرد.

در طول 20 سال گذشته کتاب‌های زیادی برای یادگیری زبان C# منتشر شده‌اند، من سعی کردم کتابی را انتخاب کنم که آخرین نسخه این زبان، که فعلاً نسخه 9 است، را پوشش دهد.

این کتاب جزء کتاب‌هایی بود که در اوایل دوران همه‌گیری کرونا ترجمه آن را شروع کردم ولی متاسفانه نتوانستم آن را تمام کنم. بالاخره فرصتی دست داد تا آن را تمام کنم.

درباره نویسنده کتاب

مارک جی. پرایس (Mark J. Price متخصص نرم‌افزار است که در شرکت مایکروسافت کار می کند. زبان اصلی برنامه‌نویسی او C# است، و بیش از 25 سال سابقه برنامه‌نویسی و تدریس دارد. مارک دارای مدرک کارشناسی ارشد در رشته علوم کامپیوتری از دانشگاه بریستول است.

پاییز 1400

کامران بزرگزاد


مقدمه مؤلف

خیلی از کتاب‌های آموزش برنامه‌نویسی در بازار موجود هستند که حجم آنها به هزاران صفحه بالغ می‌شود و عنوان آنها هم این است که مرجع کامل زبان C# و چهارچوب .NET هستند.

این کتاب با آنها متفاوت است، زیرا با حجم 750 صفحه‌ای که دارد، کتاب مختصری محسوب می‌شود. ولی همراه با ارائه نمونه‌های عملی که در مورد موضوعات مختلف مطرح می‌کند، می‌خواهد کتابی با روح باشد که خواندن آن مفرح است.

این کتاب یک راهنمای قدم به قدم برای آموزش C# نیز هست، که با مطرح کردن مثال‌های عملی درباره کاربرد .NET چند-سکویی، برنامه‌هایی را معرفی می‌کند که می‌توانند توسط آن ساخته شوند. این کتاب برای مبتدیانی که می‌خواهند C# و .NET را یاد بگیرند، و همچنین برنامه‌نویسانی که در گذشته با این زبان کار کرده‌اند ولی در چند سال اخیر از تغییراتی که در این زبان حاصل شده غافل بوده‌اند، بسیار مناسب است.

اگر شما از قبل با نسخه‌های قدیمی‌تر زبان C# کار کرده‌اید، در اینصورت می‌توانید به فصل دوم کتاب بروید و نگاهی به عناوین آن بی‌اندازید تا با ویژگی‌های جدید این زبان آشنا شوید و مستقیماً آنها را بخوانید. همپنین اگر با نسخه‌های قدیمی .NET کار کرده‌اید می‌توانید به فصل 7 رجوع کرده و ویژگی‌های جدید این چهارچوب را مطالعه کنید.

به منظور اینکه بتوانید سریعاً دست بکار شده و همکاران و دوستانتان را تحت تاثیر قرار دهید، من خیلی فوری به نکات اصلی C# و .NET اشاره می‌کنم. در این کتاب، بجای اینکه بسیاری از خواننده‌گان را با خواندن جزئیاتِ کامل خسته کنم، من از توضیح آنها صرف نظر کرده، و فرض را بر این می‌گذارم که شما آنقدر مهارت دارید که برای گرفتن اطلاعات دقیق‌تر درباره موضوعاتِ مرتبط با آنها، به سایت‌هایی نظیر Google رجوع کنید. اینها شامل مطالبی هستند که در یک کتاب مقدماتی یا متوسط نیازی به توضیح آنها نیست.

برای پاسخ به پرسش‌های پایان فصل و همچنین راهنمایی قدم‌ به قدم حل مسائل مطرح شده، شما می‌توانید به سایت گیت‌هاب (https://github.com/markjprice/cs9dotnet5) بروید و نسخه‌ای از آن را بر روی کامپیوتر خودتان کپی (clone) کنید.

چه موضوعاتی در این کتاب پوشش داده می‌شوند

فصل 1، تحت عنوان ”به C# و .NET خوش آمدید!“، درباره برپاسازی محیط توسعه شما و استفاده از Visual Studio Code برای نوشتن ساده‌ترین برنامه ممکن با C# و .NET است. شما یاد خواهید گرفت که چگونه در سیستم‌ عامل‌های پشتیبانی شده، برنامه‌هایی را بنویسید و آنها را کامپایل کنید. این شامل ویندوز، مک‌او‌اس، و لینوکس می‌شود. برای ساده‌تر نوشتن برنامه‌های کنسولی، شما بکارگیری ویژگی جدیدی بنام برنامه سطح-بالا را یاد می‌گیرید که در C# 9.0 معرفی شده. شما همچنین یاد خواهید گرفت که در اینترنت چه جاهایی را برای کمک گرفتن جستجو کنید.

فصل 2، تحت عنوان ”صحبت به زبان C# به معرفی نسخه‌های مختلف C# و ویژگی‌های جدیدی که به هر یک از آنها اضافه شده می‌پردازد، و سپس به معرفی دستور زبان و واژگان C# می‌پردازد که لازمه نوشتن تمام برنامه‌ها به این زبان هستند. در عمل شما یاد خواهید گرفت که چگونه متغیرها از گونه‌های مختلف را اعلان کنید، و از تغییر مهمی که در C# 8 در رابطه با ”گونه‌های ارجاعی نول‌پذیر“ حاصل شده نیز آگاه خواهید شد.

فصل 3، تحت عنوان ”کنترل روند برنامه و تبدیل گونه‌ها“ استفاده از عملگرها برای انجام عمل‌های ساده بر روی متغیرها را توضیح می‌دهد، از جمله مقایسه آنها، و نوشتن کُدهایی برای تصمیم‌گیری، انطباق الگو در C# 7 تا C# 9، تکرار بلوکی از عبارات، و تبدیل گونه‌ها به یکدیگر.

فصل 4، تحت عنوان ” نوشتن، رفع‌اشکال، و آزمایش توابع“ درباره اصل (DRY)، یا ”کارهای تکراری نکنید“ است. اینکار با استفاده از توابعی صورت می‌گیرد که می‌توانند یا به سبک تابعی، یا دستوری نوشته شده، و مجدداً در همان برنامه، یا برنامه‌های دیگر، مورد استفاده قرار گیرند. شما همچنین چگونگی استفاده از ابزارهای اشکالزدایی را یاد خواهید گرفت، تا از آنها برای رفع اشکار و ردیابی رفتار برنامه استفاده کنید.

1.    فصل 5، تحت عنوان ”ساخت گونه‌های خودتان توسط برنامه‌نویسی-شیءگرا“ اعضای مختلفی که یک گونه می‌تواند داشته باشد را شرح می‌دهد، از جمله فیلدها برای ذخیره داده‌ها، و متدها برای انجام کارها. شما از مفاهیم برنامه‌نویسی شیء‌گرا، مانند تجمیع و لفافه‌بندی استفاده خواهید کرد. با چندتایی‌ها و متغیرهای out آشنا خواهید شد. همچنین با کلیدواژه‌های جدیدی مثل with و record که در C# 9 به این زبان اضافه شدند آشنا می‌شوید.

فصل 6، تحت عنوان ” پیاده‌سازی رابط‌ها (اینترفیس‌ها) و وراثت“ به شرح چگونگی انشعاب گونه‌های جدید از گونه‌های موجود با استفاده از برنامه‌نویس شیء‌گرا می‌پردازد. شما چگونگی تعریف عملگر‌ها و توابع محلی، نماینده‌ها، و رویدادها، چگونگی پیاده‌سازی اینترفیس‌ها و چگونگی باطل کردن یکی از اعضای گونه و بازنویسی مجدد آن، چندریختی، ایجاد متدهای گسترش، و چگونگی قالب بندی میان کلاس‌های موجود در یک سلسله مراتب وراثت را یاد خواهید گرفت.

فصل 7، تحت عنوان ” بسته‌ها و گونه‌های .NET به معرفی نسخه‌های مختلف .NET و جدول‌ ویژگی‌های جدید آنها می‌پردازد، و سپس گونه‌های .NET که از استاندارد .NET پیروی می‌کنند، و اینکه آنها با C# چطور رابطه داند را معرفی می‌کند. شما همچنین چگونگی بسته‌بندی و استقرار برنامه‌ها و کتابخانه‌های خودتان را یاد خواهید گرفت.

فصل 8، تحت عنوان ” گونه‌های متداول در .NET گونه‌هایی را شرح می‌دهد که برای انجام کارهای متداول می‌توانید در برنامه خودتان از آنها استفاده کنید. این کارها شامل تغییر اعداد و متن‌ها، ذخیره‌هازی داده‌ها در گردایه‌ها، و پیاده‌سازی بین‌المللی‌سازی (internationalization) هستند.

فصل 9، تحت عنوان ” فایل‌ها، جریان‌ها و سریال‌سازی“ درباره تعامل برنامه با سیستم‌فایلی، خواندن و نوشتن فایل‌ها و جریان‌ها، کدگذاری متن‌ها، فرمت‌های سریال‌سازی، از قبیل JSON و XML است.

فصل 10، تحت عنوان ” محافظت از داده‌ها و برنامه‌ها“ درباره رمزگذاری داده‌ها است تا از داده‌ها شما در مقابل کاربرانِ بدخواه حفاظت کند. همچنین با درهم‌سازی و امضا آشنا خواهید شد که می‌توانند صحت داده‌ها را تضمین کنند. همچنین با اعتبارسنجی و مجوزسنجی نیز آشنا خواهید شد.

فصل 11، تحت عنوان ” کار با پایگاه‌های‌داده توسط Entity Framework Core خواندن و نوشت پایگاه‌های داده، مانند Microsoft SQL Server و SQLite را با استفاده از تکنولوژی ORM توضیح می‌دهد.

فصل 12، تحت عنوان ” پرس‌وجو و تغییر داده‌ها با استفاده از LINQ شما را با زبان پرس‌ وجوی یکپارچه، یا LINQ، آشنا می‌کند.

فصل 13، تحت عنوان ” بهبود سرعت و مقیاس‌پذیری برنامه‌ها توسط چندکارگی“ به شرح اجرای همزمان چند کار برای بهبود عملکرد برنامه‌ها، مقیاس‌پذیری، و بهره‌وری کاربر می‌پردازد. برای دیدبانیِ سرعت و عملکرد برنامه‌ها، شما چگونگی کار با async و استفاده از فضای اسمی System.Diagnostics را یاد خواهید گرفت.

فصل 14، تحت عنوان ” معرفی برنامه‌های عملی C# و .NETانواع برنامه‌های چند-سکویی که می‌توانند با استفاده از C# و .NET ساخته شوند را معرفی می‌کند. شما همچنین با پایگاه داده Northwind آشنا می‌شوید که در فصل 15 از آن استفاده می‌گردد.

فصل 15، تحت عنوان ” ساخت وب‌سایت‌ها با استفاده از صفحات ASP.NET Core Razor درباره اصول ساخت وب‌سایت‌ها با استفاده از معماری نوین ASP.NET Core است. شما همچنین با صفحات Razor آشنا می‌شوید که کارِ ایجاد صفحاتِ وبِ پویا برای وب‌سایت‌های کوچک و متوسط را آسان می‌کند. همچنین خط‌لوله درخواست‌ و پاسخ HTTP را یاد خواهید گرفت.

آنچه برای یادگیری این کتاب به آن نیاز دارید

در بسیاری از سیستم‌عامل‌ها، از جمله ویندوز، مک‌او‌اس، و لینوکس‌های مختلف، شما می‌توانید با استفاده از Visual Studio Code برنامه‌های C# را توسعه داده و آنها را مستقر کنید. تنها چیزی که نیاز دارید اتصال به اینترنت، و سیستم‌عاملی است که از Visual Studio Code پشتیبانی کند.

هر دستوری که باید در خط فرمان تایپ شود، و همینطور خروجی‌های آن، در یک جعبه تیره مانند زیر نمایش داده می‌شوند:

Description: Description: dotnet new console

 

 اطلاعات بیشتر: شامل لینک‌هایی به منابع خارجی هستند که برای خواندن مطالب بیشتر بکار می‌روند.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

 

روش‌های خوب: شامل توصیه‌هایی برای حرفه‌ای نوشتن برنامه‌ها هستند.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image003.png

 


فصل 1

به C# و .NET خوش آمدید!

در فصل نخست کتاب، هدف این است که محیط برنامه‌نویسی شما را برپا کنیم، بفهمیم چه شباهت‌ها و تفاوت‌هایی میان .NET و .NET Core، .NET Framework، و .NET Standard وجود دارد، و در آخرِ فصل نیز با استفاده از Visual Studio Code (VSC)، یک برنامه بسیار ساده به زبان C# 9 و .NET 5 بنویسیم.

بعد از این فصل، کتاب را می‌توان به سه بخش تقسیم کرد: بخش اول، اصول ابتدایی و واژگان زبان C# ؛ بخش دوم، گونه‌های موجود در .NET برای ساخت خصوصیت‌های مختلف برنامه؛ و بخش سوم، مثال‌هایی از برنامه‌های چند-سکویی (cross-platform) که شما با استفاده C# و .NET می‌توانید بسازید.

برای یادگیری موضوعات پیچیده، بیشتر مردم بجای اینکه جزئیات آن را بخوانند ترجیح میدهند از روش تقلید و تکرار استفاده کنند؛ بنابراین من هم در این کتاب قصد ندارم با شرحِ جزئیاتِ همه مراحل شما را گیج کنم. هدف این است که شما بتوانید کدهایی را بنویسید، و از روی آن کدها یک برنامه بسازید، و ببینید که آیا درست اجراء می‌شود.

لازم نیست فوراً همه اصول زیربنایی را بدانید. بعداً همانطور که شما برنامه‌های بیشتری را می‌سازید با جزئیات نیز آشنا خواهید شد.

فصل اول موضوعات زیر را پوشش خواهد داد:

·        برپا کردن محیط برنامه نویسی

·        فهم  .NET

·        ساخت برنامه‌های کنسولی با استفاده از Visual Studio Code

·        دانلود حل مسائل کتاب از منبع GitHub

·        جستجو در اینترنت برای کمک

برپا کردن محیط برنامه‌نویسی

پیش از اینکه شما برنامه‌نویسی را شروع کنید به یک ویرایش‌گر  C# نیاز دارید. مایکروسافت خانواده‌ای از ویرایش‌گرها و محیط‌های برنامه‌نویسی یکپارچه یا IDEها را فراهم آورده، که شامل موارد زیر هستند:

         Visual Studio Code

         GitHub Codespaces

         Visual Studio 2019

         Visual Studio 2019 for Mac

استفاده از Visual Studio Code برای برنامه‌نویسی چند-سکویی

جدیدترین و سبُک‌ترین ویرایشگری که می‌توانید انتخاب کنید، و تنها ویرایشگر چند-سکویی که از سوی مایکروسافت ارائه شده Visual Studio Code (یا VSC) است. این ویرایشگر می‌تواند بر روی کلیه سیستم‌عامل‌های متداول، از جمله ویندوز، مک‌او‌اس، و بسیاری از نسخه‌های لینوکس، مثل Red Hat و Ubuntu اجراء شود.

Visual Studio Code انتخاب خوبی برای برنامه‌نویسی‌های مُدرن چند-سکویی است، زیرا به غیر از  C# از زبان‌های دیگری را نیز پشتیبانی کرده، و چند-سکویی و سبُک است و می‌تواند بر روی تمام سیستم‌عامل‌های متداول اجراء شود.

در یک بررسی که از سوی سایت Stack Overflow در 2019 انجام گرفت، همانطور که در شکل زیر دیده می‌شود، بیش از نیمی از برنامه‌نویسان Visual Studio Code را بعنوان محیط برنامه‌نویسی خود انتخاب کرده بودند:

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image004.png

شکل 1.1: محبوب‌ترین محیط‌های برنامه‌نویسی

اطلاعات بیشتر: شما می‌توانید گزارش این بررسی را از طریق این آدرس  مطالعه کنید:

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image005.png

 

استفاده از Visual Studio Code به این معنی است که برنامه نویس برای توسعه برنامه‌های چند-سکویی می‌تواند از یک ویرایشگر چند-سکویی استفاده کند. بنابراین، من برای کلیه فصول این کتاب، از این ویرایشگر استفاده کرده‌ام.

 

 اطلاعات بیشتر: شما می‌توانید با مراجعه به این آدرس اطلاعات بیشتری را در مورد طرح‌های مایکروسافت برای VSC کسب کنید:

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

البته شما می‌توانید بجای VSC از Visual Studio 2019  و یا  Visual Studio for Macنیزا د از سافت برای کسب کنید: ات بیشتری را در مورد یشگر برای برنامه نویسی ده تظمین شده است. اغلب اوقات حضور آن درنیز استفاده کنید، که در اینصورت من فرض را بر این می‌گذارم که شما می‌دانید چگونه از آنها استفاده کنید. این کتاب چگونگی استفاده از ویرایشگرها را آموزش نمی‌دهد، و فقط بر روی برنامه نویسی تمرکز دارد.

 اطلاعات بیشتر: برای مقایسه Visual Studio Code  و Visual Studio 2019 شما می‌توانید به  این آدرس رجوع کنید:

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

استفاده از GitHub برای برنامه‌نویسی در کلاد

GitHub Codespaces یک محیط توسعه کاملاً تنظیم شده بر پایه Visual Studio Code است که می‌تواند در محیطی که در کلاد (cloud) میزبانی می‌شود از طریق یک مرورگر وب مورد دسترسی قرار گیرد. این از مخازن Git، افزونه‌ها (extensions)، و یک رابط-خط-فرمانی توکار پشتیبانی می‌کند تا شما بتوانید از هر دستگاهی برنامه‌های خودتان را ویرایش، اجرا، و آزمایش کنید.

 اطلاعات بیشتر: برای کسب اطلاعات بیشتر در مورد GitHub Codespaces به این آدرس زیر رجوع کنید:

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

استفاده از Visual Studio 2019 برای توسعه برنامه‌های ویندوز

Visual Studio 2019 تنها بر روی ویندوزهای نسخه 7 به بالا کار می‌کند. اگر می‌خواهید برنامه‌های UWP[1] را توسعه دهید باید، VS را بر روی ویندوز 10 نصب کنید.

برنامه‌نویسی چند-سکویی

انتخاب ویرایشگر و سیستم‌عاملی که برنامه‌های خودتان را در آنجا توسعه می‌دهید، باعث نمی‌شود استقرار (deployment) برنامه‌هایی که می‌نویسید به همان سکو محدود باشند.

  .NET 5از سکوهای زیر برای استقرار برنامه‌ها پشتیبانی می‌کند:

·        سیستم عامل ویندوز: ویندوزهای نسخه 7 به بالا. ویندوزهای سرور 2012 R2 SP1 به بالا. سرور Nano نسخه 1809 به بالا.

·        سیستم عامل مک: macOS High Sierra نسخه 10.13 به بالا.

·        لینوکس: Alpine Linux 3.11, به بالا CentOS 7, به بالا، Debian 9 به بالا، Fedora 30 به بالا . Linux Mint 18, به بالا . openSUSE 15, به بالا . Red Hat Enterprise Linux (RHEL) 7, به بالا . SUSE Enterprise Linux 12 SP2, به بالا Ubuntu 18.04, 19.10, 20.04, به بالا.

 اطلاعات بیشتر: برای اطلاع از فهرست سیستم‌عامل‌های پشتیبانی شده به این آدرس رجوع کنید:

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

پشتیبانی از Windows ARM64 در  .NET 5به این معنی است که شما می‌توانید برنامه‌ها را بر روی دستگاه‌های Windows ARM، نظیر Microsoft Surface Pro X توسعه داده و سپس مستقر کنید.

اطلاعات بیشتر: برای اطلاع از پشتیبانی از Windows ARM64 به این آدرس رجوع کنید:

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

نسخه‌های مختلف Visual Studio Code

تقریباً هر ماه مایکروسافت نسخه‌ای از Visual Studio Code را بیرون می‌دهد.

 اطلاعات بیشتر: برای اطلاع از آخرین نسخه Visual Studio Code به این آدرس رجوع کنید:

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

نسخه‌ای که ما در این کتاب از آن استفاده می‌کنیم 1.49 است که در سپتامبر 2020 بیرون آمده، ولی نسبت به شماره نسخه افزونه C# for Visual Studio Code که بعداً نصب می‌کنید، شماره نسخه VSC‌ از اهمیت کمتری برخوردار است.

هرچند نصب افزونه  C# بر روی VSC الزامی نیست، ولی با نصب آن امکان تایپ هوشمند (IntelliSense)، حرکت در برنامه، و خصوصیات اشکالزدایی برای شما فراهم می‌آید، بنابراین بهتر است آن را نصب کنید. برای بکارگیری C# 9، افزونه نسخه 1.23 به بالا را نصب کنید.

در این کتاب من از کلیدهای میانبر و تصاویر گرفته شده از VSC در macOS استفاده می‌کنم. طریقه استفاده در ویندوز و لینوکس نیز تا حد زیادی به همین شکل است، هر چند ممکن است کلیدهای میانبر فرق کنند. برخی از کلیدهای میانبر پرکاربرد VSC در جدول زیر نشان داده شده است:

کار انجام شده

macOS

Windows

نشان دادن  Command Palette

Cmd + Shift + P

Ctrl + Shift + P

نشان دادن  Command Palette

F1

F1

رفتن به تعریف

F12

F12

رفتن به عقب

Ctrl + -

Alt +

رفتن به جلو

Ctrl + Shift + -

Alt +

نشان دادن ترمینال

Ctrl + ` (backtick)

Ctrl + ' (quote)

ترمینال جدید

Ctrl + Shift + ` (backtick)

Ctrl + Shift + ' (quote)

خاموش و روشن کردن توضیحات خطی

Ctrl + /

Ctrl + /

خاموش و روشن کردن توضیحات بلوکی

Shift + Option + A

Shift + Alt + A

جهت مشاهده کامل کلیدهای میانبر، توصیه می‌کنم فایل‌های PDF زیر را دانلود کنید:

·        برای ویندوز:

https://code.visualstudio.com/shortcuts/keyboard-shortcuts-windows

·        برای مک‌او‌اس:

https://code.visualstudio.com/shortcuts/keyboard-shortcuts-macos.pdf

·        برای لینوکس:

https://code.visualstudio.com/shortcuts/keyboard-shortcuts-linux.pdf

 

 اطلاعات بیشتر: برای اطلاع از کلیدهای میانبر پیش‌فرض در VSC و چگونگی تغییر آنها به این آدرس رجوع کنید:

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

در چند سال اخیر Visual Studio Code طرفداران زیادی پیدا کرده و مایکروسافت از محبوبیت آن شگفت‌زده شده. اگر شما آنقدر جرات دارید که بخواهید از نسخه‌های ناپایدار VSC استفاده کنید، نسخه‌های درون‌سازمانی آن که هر روزه ساخته می‌شوند نیز قابل دانلود هستند.

دانلود و نصب Visual Studio Code

حال شما برای دانلود و نصب VSC، افزونه C#، و  .NET 5 SDKآماده هستید:

1.    از آدرس https://code.visualstudio.com نسخه پایدار VSC را دانلود کرده و سپس نصب کنید.

2.    از آدرس https://www.microsoft.com/net/download.NET 5 SDK را دانلود کرده و سپس نصب کنید.

3.    برای نصب افزونه  C#شما ابتدا باید برنامه VSC را اجراء کنید.

4.    در VSC بر روی آیکون Extensions کلیک کنید و یا به View | Extensions بروید.

5.     C#یکی از محبوب‌ترین افزونه‌های VSC است و شما باید آن را در بالای فهرست ببینید، در غیر اینصورت، همانطور که در شکل زیر نشان داده شده  C# را در جعبه جستجو تایپ کنید:

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image006.png

·        بر روی Install کلیک کرده و صبر کنید تا پکیج‌های مربوطه دانلود و نصب شوند.

 اطلاعات بیشتر: برای اطلاع از پشتیبانی  C#در VSC به این آدرس رجوع کنید:

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

.NET

.NET 5، .NET Framework،.NET Core، و Xamarin همه سکوهای مرتبطی هستند که برنامه‌ نویسان برای ساخت برنامه‌ها و سرویس‌ها از آنها استفاده می‌کنند. در این بخش من قصد دارم هر یک از آنها را به شما معرفی کنم.

چهارچوب  .NET(NET Framework.)

چهارچوب  .NET یک سکوی توسعه برنامه است که شامل یک حین‌اجراء زبان مشترک (CLR[2]) می‌باشد که اجراء برنامه‌ها را برعهده دارد. CLR همچنین یک کتابخانه کلاس اصلی (BCL[3]) دارد که یک کتابخانه غنی از کلاس‌ها را فراهم می‌آورد تا برنامه‌ها از آنها استفاده کنند. در ابتد مایکروسافت چهارچوب  .NETرا طوری طراحی کرده بود که امکان چند-سکویی داشته باشد، ولی تلاش آنها بیشتر بر این متمرکز بود که بهترین کارآیی را در سیستم‌عامل ویندوز داشته باشد.

از  .NET Framework 4.5.2به بعد، این چهارچوب به یکی از اجزاء رسمی سیستم‌عامل ویندوز بدل شد. چهارچوب  .NETبر روی بیش از یک میلیارد کامپیوتر نصب شده، بنابراین تا آنجا که امکان دارد تغییرات آن باید کم باشد. حتی تصحیح اشتباهات نیز می‌تواند مشکل‌زا باشد، بنابراین بروزرسانی‌های آن بندرت انجام می‌گیرد.

کلیه برنامه‌هایی که در یک کامپیوتر برای چهارچوب  .NETنوشته شده‌اند در نسخه یکسانی از CLR و کتابخانه‌ها مشترک هستند که در (GAC[4]) ذخیره شده‌اند، و درصورتی که برخی از آنها برای سازگاری به نسخه خاصی نیاز داشته باشند، این می‌تواند به مشکلاتی منجر شود.

روش‌های خوب:: اگر بخواهیم دقیقتر صحبت کنیم، باید گفت که.NET Framework سکوی موروثی (legacy) است که فقط بر روی ویندوز کار می‌کند. برای ایجاد برنامه‌های جدید از این چهارچوب استفاده نکنید.

 

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image003.png

 

پروژه‌های Mono  و Xamarin

غیر از مایکروسافت، شرکت‌های دیگری نیز شروع به پیاده‌سازی.NET Framework کردند و اسم آن را پروژه Mono گذاشتند. Mono چند-سکویی است، ولی همیشه از پیاده‌سازی‌های رسمی .NET Framework عقب بوده.

 اطلاعات بیشتر: برای اطلاع از جزئیات پروژه Mono به این آدرس رجوع کنید:

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

بدلیل اینکه Mono به پایه‌ای برای سکویِ موبایلِ زَمرین Xamarin و همچنین سکوهای توسعه بازی، مثل Unity، بدل شد، محبوبیت آن افزایش یافت.

 اطلاعات بیشتر: برای اطلاعات بیشتر در مورد Unity به لینک زیر رجوع کنید:

https://docs.unity3d.com/

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

مایکروسافت در سال 2016 Xamarin را خرید و حالا افزونه Xamarin که قبلاً بسیار گران بود، بطور مجانی بر روی Visual Studio 2019 قرار گرفته. در سیستم عامل مک، مایکروسافت نام Xamarin Studio را به Visual Studio for Mac تغییر داد، که حالا علاوه بر ایجاد برنامه‌های موبایل، می‌توان از آن برای ایجاد برنامه‌های کنسولی و سرویس‌های وب نیز استفاده کرد.

.NET Core

امروزه ما در یک دنیای چند-سکویی زندگی می‌کنیم که حقیقتاً برنامه نویسی موبایل و کلاد از اهمیت ویندوز بعنوان یک سیستم‌عامل کاسته‌اند. به همین دلیل تلاش مایکروسافت بر این بوده که تا نسخه‌های جدید  .NETرا از وابستگی‌هایی که به ویندوز دارند رها کند. همانطور که آنها مشغول بازنویسی چهارچوب  .NETبودند تا آن را به یک سیستم چند-سکوی واقعی بدل کنند، آنها فرصت این را پیدا کردند تا بخش‌های عمده‌ای از آن که جزء هسته محسوب نمی‌شدند را بردارند.

این محصول جدید  .NET Core(هسته دات نت) نام‌گذاری شد و شامل پیاده‌سازی یک هسته چند-سکویی از CLR به نام CoreCLR است، به همراه یک کتابخانه ساده ‌سازی شده بنام CoreFX عرضه می‌شود.

اسکات هانتر مدیر برنامه  .NETدر مایکروسافت گفت ”چهل درصد از مشتریان .NET Core برنامه‌نویسانی هستند که جدیداً از این سکو استفاده می‌کنند، و این همان چیزی است که ما از  .NET Coreانتظار داشتیم، یعنی پیوستن آدم‌های جدید به این سکو.“

 .NET Coreبسرعت در حال تحول است و بدلیل اینکه می‌تواند در کنار یک برنامه مستقر شود، می‌تواند مکرراً تغییر کند، تغییراتی که بر روی برنامه‌های  .NET Core دیگری که بر روی همان ماشین قرار دارند تاثیر ندارد. بهسازی ‌هایی که مایکروسافت بر روی  .NET Coreانجام می‌دهد نمی‌توانند به  .NET Framework اضافه شوند.

 اطلاعات بیشتر: برای اطلاعات از موقعیت  .NET Core و  .NET Framework به لینک زیر رجوع کنید:

https://devblogs.microsoft.com/dotnet/update-on-net-core-3-0-and-net-framework-4-8/

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

 .NET 5و حرکت بسوی یک .NET واحد

در کنفرانس Microsoft Build developer که در ماه می 2020 برگزار شد، تیم .NET اعلام کرد طرح آنها برای یکپارچه سازی  .NETبه تاخیر افتاده. آنها گفتند .NET 5 که در 10 نوامبر 2020 بیرون داده می‌شود، کلیه سکوهای مختلف.NET ، بجزء سکوی موبایل، را یکپارچه می‌کند. یکپارچه سازی کلی، که شامل موبایل هم می‌شود، تا وقتی .NET 6 در نوامبر 2021 بیرون بیاید، اتفاق نمی‌افتاد.

نام  .NET Core به  .NETتغییر پیدا کرد، و شماره نسخه اصلی آن هم که باید 4 باشد از قلم افتاد تا با .NET Framework 4.x اشتباه نشود. مایکروسافت نسخه‌های سالیانه اصلی خودش را در ماه نوامبر بیرون می‌دهد، مانند اپل که اینکار را بطور سالیانه در ماه سپتامبر انجام می‌دهد.

 اطلاعات بیشتر: برای اطلاع از طرح‌های مایکروسافت برای یک  .NETواحد، به این آدرس رجوع کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

جدول زیر زمان بیرون دهی نسخه‌های اصلی  .NET  جدید را نشان می‌دهد:


نسخه

تاریخ بیرون‌دهی

ویرایش

تاریخ‌انتشار

.NET Core RC1

November 2015

اول

March 2016

.NET Core 1.0

June 2016

 

 

.NET Core 1.1

November 2016

 

 

.NET Core 1.0.4 and .NET Core 1.1.1

March 2017

دوم

March 2017

.NET Core 2.0

August 2017

 

 

.NET Core for UWP in Windows 10 Fall Creators Update

October 2017

سوم

November 2017

.NET Core 2.1 (LTS)

May 2018

 

 

.NET Core 2.2 (Current)

December 2018

 

 

.NET Core 3.0 (Current)

September 2019

چهارم

October 2019

.NET Core 3.1 (LTS)

December 2019

 

 

.NET 5.0 (Current)

November 2020

پنجم

November 2020

.NET 6.0 (LTS)

November 2021

ششم

November 2021

پشتیبانی از  .NET

همانطور که در زیر توضیح داده شده، نسخه‌های  .NETیا پشتیبانی دراز مدت (LTS[5]) دارند، یا پشتیبانی جاری (Current).

·        LTS: این نسخه‌ها پایدار هستند و در طول عمرشان به آپ‌دیت‌های کمتری نیاز دارند. این نسخه‌ها برای برنامه‌هایی مناسبند که شما قصد ندارید آنها را بطور مکرر آپ‌دیت‌ کنید. از نسخه‌های LTS تا سه سال بعد از بیرون دهی پشتیبانی می‌شود.

·        Current: این نسخه‌ها شامل ویژگی‌هایی هستند که ممکن است بر حسب بازخوردهایی (feedback) که از کاربران گرفته می‌شود تغییر کنند. اینها برای برنامه‌هایی مناسب هستند که شما بطور فعال درگیر توسعه آنها هستید و نیاز به استفاده از آخرین بهبودها بوجود آمده در  .NET هستند. پس از یک دوره سه ماهه، از نسخه‌های فرعی گذشته پشتیبانی نمی‌شود.

برای درک بهتر انتخاب نسخه‌های Current و LTS می‌توانید به نمودار زیر نگاه کنید:

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image007.png

شکل 1.3: پشتیبانی از نسخه‌های مختلف  .NET

برای مثال، اگر شما پروژه‌ای را با  .NET 5.0بسازید و مایکروسافت در فوریه 2021 نسخه  .NET 5.1 را بیرون دهد، آنگاه نیاز دارید پروژه خودتان را تا آخر ماه می 2021 به  .NET 5.1آپ‌دیت کنید.

اگر به پشتیبانی دراز مدت‌تری نیاز دارید، حالا از  .NET 5.0استفاده نکنید، بلکه .NET Core 3.1 را انتخاب کنید. در نوامبر 2021،  وقتی .NET 6.0 بیرون آمد، شما هنوز بیشتر از یک سال وقت دارید تا تا پروژه خودتان را به  .NET 6.0آپ‌گرید کنید.

کلیه نسخه‌های  .NET Core به آخر عمرشان رسیده‌اند، مگر نسخه‌های LTS که پایان عمر آنها طبق لیست زیر به پایان می‌رسد:

·        پایان عمر  .NET Core 2.1 تا 21 آگوست 2021 است.

·        پایان عمر  .NET Core 3.1 تا 3 دسامبر 2022 است.

·        اگر همانطور که قرار است  .NET Core 6.0در نوامبر 2021 بیرون بیاید، پایان عمر آن نوامبر 2024 است.

 اطلاعات بیشتر: برای اطلاع از سیاست‌های بیرون دهی  .NET به این آدرس رجوع کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

نسخه‌های حین‌اجرای  .NET و SDK  .NET

شماره نسخه‌های حین‌اجرای  .NET(.NET Runtime) از قراردادهای متداول نسخه‌بندی نرم‌افزار پیروی می‌کنند، یعنی افزایش شماره اصلی به معنای تغییرات عمده، افزایش شماره فرعی به معنای اضافه شدن ویژگی‌های جدید، و افزایش شماره وصله (patch) نشاندهنده رفع اشکال می‌باشد.

شماره نسخه‌های  .NET SDKاز قراردادهای متداول نسخه‌بندی پیروی نمی‌کند. شماره‌های اصلی و فرعی SDK به شماره‌های نسخه حین‌اجرا بستگی دارند. ولی شماره وصله از قراردادهای متداول پیروی می‌کند و نشان دهنده رفع اشکال است. در جدول زیر مثال‌هایی از نسخه‌های  SDK را می‌بینید:

تغییر

حین‌اجراء

SDK

Initial release

5.0.0

5.0.100

SDK bug fix

5.0.0

5.0.101

Runtime and SDK bug fix

5.0.1

5.0.102

SDK new feature

5.0.1

5.0.200

 

 اطلاعات بیشتر: برای اطلاع از چگونگی نسخه‌بندی‌های   .NET Coreبه این آدرس رجوع کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

حذف نسخه‌های قدیمی  .NET

آپ‌دیت‌های حین‌اجرای  .NETبا نسخه‌های اصلی مثل 5.x سازگار هستند و نسخه‌های آپدیت شده  .NET SDK قابلیت این را دارند تا برنامه‌هایی را بسازند که نسخه‌های قبلی حین‌اجرا را هدف گرفته‌اند، بنابراین می‌توان نسخه‌های قبلی آنها را برداشت. شما با وارد کردن دستورات زیر می‌توانید ببینید که چه نسخه‌هایی از حین‌اجرا و SDK بر روی کامپیوتر شما نصب شده است:

         dotnet --list-sdks

         dotnet --list-runtimes

برای برداشتن  .NET SDK در ویندوز از قسمت App & features استفاده کنید.

هم در ویندوز و هم در مک‌او‌اس، می‌توانید از ابزار dotnet-core-uninstall استفاده کنید.

 اطلاعات بیشتر: برای اطلاع از چگونگی کار با ابزارهای .NET Uninstall به این آدرس رجوع کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

برای مثال، من هر ماه برای برداشتن نسخه‌های قدیمی از دستور زیر استفاده می‌کنم:

Description: Description: dotnet-core-uninstall --all-previews-but-latest --sdk

 

تفاوت  .NET Core و  .NET 5در چیست؟

به دلیل اینکه تکنولوژی‌های موروثی (legacy) و غیر-چند-سکویی از  .NET برداشته شده، نسخه‌های جدید  .NETکوچکتر از نسخه‌های .NET Framework هستند. برای مثال، Windows Forms و Windows Presentation Foundation (WPF)  که برای ساختن برنامه‌ها با رابط گرافیکی (GUI) از آنها استفاده می‌شود، بطور تنگاتنگی به سیستم‌ ویندوز گره خورده‌اند، و به همین دلیل در سیستم‌عامل‌های macOS  و Linux از  .NETحذف شده‌اند.

یکی از ویژگی‌های  .NET 5پشتیبانی برای اجرای برنامه‌های Windows Forms و  (WPF)با استفاده از Windows Desktop Pack است که در نسخه ویندوزی .NET 5 گنجانده شده، و به همین دلیل است که SDK ویندوز از SDKهای مشابه خودش در macOS  و Linux بزرگتر است. شما می‌توانید تغییرات کوچکی را در برنامه‌های موروثی ویندوزی خودتان ایجاد کنید تا برنامه شما با .NET 5 سازگار شود، و بتوانید از ویژگی‌های جدید و بهبود سرعت .NET 5 بهره‌مند شوید.

ASP.NET Web Forms  و  Windows Communication Foundation (WCF) جزء تکنولوژی‌ها قدیمی هستند که قبلاً از آنها برای تولید برنامه‌ها و سرویس‌های وب استفاده می‌شد، ولی امروز برنامه‌نویسان کمتر از آنها استفاده می‌کنند، بنابراین آنها نیز از  .NET 5حذف شده‌اند. بجای آنها، برنامه‌نویسان ترجیح می‌دهند از ASP.NET MVC و ASP.NET Web API استفاده کنند. این دو تکنولوژی، کلاً باز‌سازی و با یکدیگر ترکیب شده‌اند طوری که در  .NET 5 قابل اجراء باشد. نام این تکنولوژی جدید ASP.NET Core است. شما در فصل 15، تحت عنوان ساخت وب‌سایت‌ها با استفاده از صفحات ASP.NET Core Razor با آن آشنا می‌شوید.

 اطلاعات بیشتر: برخی از برنامه‌نویسانی که بر روی .NET Framework کار می‌کنند، از اینکه ASP.NET Web Forms, WCF, وWindows Workflow (WF) از  .NET 5برداشته شده‌اند ناراضی هستند، و انتظار دارند مایکروسافت عقیده خودش را در اینمورد تغییر دهد. پروژه‌های منبع ‌بازی هستند که پروژه‌های WCF  و  WFرا قادر می‌کنند که به  .NET 5مهاجرت کنند. برای اطلاعات بیشتر به این آدرس مراجعه کنید. یک پروژه منبع باز نیز برای کمپوننت Blazor Web Forms وجود دارد، که می‌توانید با مراجعه به این آدرس اطلاعات لازم را کسب کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

 

Entity Framwork 6 یا (EF6) یک تکنولوژیِ نگاشت شیء-رابطه (ORM)[6] است که برای کار با داده‌هایی که در یک پایگاهِ دادهِ رابطه‌ای، نظیر Oracle  و Microsoft SQL Server، ذخیره شده‌اند از آن استفاده می‌شود. این تکنولوژی در طول سال‌های گذشته خیلی بزرگ شده بود، بنابراین در نسخه چند-سکویی از حجم آن کاسته شد، و پشتیبانی پایگاه‌های غیر-رابطه‌ای نظیر Microsoft Azure Cosmos DB نیز به آن افزوده شده. نام جدید آن نیز Entity Framework Core است. شما در فصل 11، تحت عنوان کار با پایگاه‌های داده با استفاده از Entity Framework Core با این تکنولوژی آشنا می‌شوید.

درصورتی که برنامه‌هایی دارید که از EF قدیمی استفاده می‌کنند، نسخه 6.3 آن در  .NET Core 3.0 به بالا پشتیبانی می‌شود.

 اطلاعات بیشتر: هرچند لغت Core از  .NET 5از قلم افتاده، هم ASP.NET Core و هم Entity Framework Core هنوز لغت Core را در نام خودشان خواهند داشت تا تمایز آنها با تکنولوژی‌های موروثی قدیمی مشخص باشد. برای اطلاع بیشتر به این آدرس رجوع کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

مایکروسافت علاوه بر اینکه برای ساختن  .NET Core بخش عظیمی از .NET Framework را از آن برداشت،  .NET  داشتنآن  ساختن  خش عظیمی ازرای اطلاع بیشتر به این آدرس رجوع کنید.نید.ییر دهد. پروژهان داده شده آن را در جعبه جستجو تایپ کنید:

را به پکیج‌های NuGet تقسیم کرد. اینها بخش‌های کوچکی هستند که می‌توانند بصورت مستقل دانلود و مستقر شوند.

هدف اولیه مایکروسافت این نیست که  .NET را کوچکتر از  .NET Framework بسازد، بلکه هدف این است که  .NETرا طوری به اجزای کوچکتر تقسیم کند که از تکنولوژی‌های جدید پشتیبانی کرده و حداقل وابستگی را داشته باشند، تا استقرار آنها فقط به پکیج‌هایی محدود شود که برنامه‌ها واقعاً به آنها نیاز دارند.

استاندارد  .NET

وضعیت  .NETدر سال 2019 به این صورت بود که 3 سکوی  .NETوجود داشت که توسط مایکروسافت کنترل می‌شد:

·        .NET Core: برای برنامه‌های چند-سکویی.

·         .NET Framework: برای برنامه‌های قدیمی موروثی.

·         Xamarin: برای برنامه‌های موبایل.

به دلیل اینکه هر یک از اینها برای سناریوهای مختلفی طراحی شده بودند، هرکدام توانایی‌ها و ضعف‌های خودشان را داشتند. بنابراین این مشکل وجود داشت که یک برنامه نویس باید سه سکوی مختلف را یاد می‌گرفت، که هر یک محدودیت‌ها و خصوصیات عجیب خودش را داشت. به همین دلیل مایکروسافت استاندارد .NET را تعریف کرد، یعنی خصوصیات یک مجموعه از APIها، که کلیه سکوهای  .NET بتوانند آنها را پیاده‌سازی کنند و حاکی از این باشد که آنها چه سطحی از سازگاری را دارند. برای مثال، سکویی که که با استاندارد 1.4 .NET سازگار باشد، دارای سازگاریِ پایه است.

با بیرون آمدن استاندارد  .NET 2و بالاتر، مایکروسافت کلیه سکوها را به سمت یک استاندارد حداقلی سوق داد، و این کارِ برنامه نویسان را راحت‌تر می‌ساخت و آنها  می‌توانستند در هر سه سکوی  .NET از برنامه‌های مشترک استفاده کنند.

برای  .NET 2و بالاتر، تعدادی از APIها برداشته شده بودند، ولی برای انتقال برنامه‌هایی که قبلاً به  .NET Frameworkنوشته شده بود به .NET Core، وجود آنها لازم بود. برخی از APIها پیاده‌سازی شدند ولی در هنگامِ اجراء یک اعتراض (exception) از خودشان بروز می‌دادند تا در واقع به کاربر بگویند نباید از آنها استفاده کند! این به سیستم‌عاملی بستگی دارد که شما  .NETرا در آن اجراء می‌کنید. ما در فصل 2، تحت عنوان صحبت به زبان  C# چگونگی رسیدگی به این اعتراض‌ها را توضیح خواهیم داد.

مهم است بدانید که استاندارد  .NETفقط یک استاندارد است. همانطور که مثلاً شما نمی‌توانید HTML5 را نصب ‌کنید، نمی‌توانید استاندارد  .NETرا هم نصب کنید. برای استفاده از HTML5 شما باید مرورگری را نصب کنید که استاندارد HTML5 را پیاده‌سازی کرده باشد.

برای استفاده از استاندارد  .NETشما باید سکویی را نصب کنید که ویژگی‌های نسخه مورد نظر استاندارد  .NET را پیاده‌سازی کرده باشد. استاندارد  .NET 2.0 به وسیله آخرین نسخه‌های  .NET Framework،  .NET Core، و Xamarin پیاده‌سازی شده است.

آخرین استاندارد  .NET ، یعنی 2.1، فقط توسط .NET Core 3.0، Mono، و Xamarin پیاده‌سازی شده. برخی از ویژگی‌هایC#  به استاندارد .NET 2.1 نیاز دارند. استاندارد .NET 2.1 توسط .NET Faramework پیاده‌سازی نشده، بنابراین .NET Framework باید بعنوان یک سکوی موروثی در نظر گرفته شود.

هنگامی که در نوامبر 2021 .NET 6 بیرون بیاید، نیاز به استاندارد .NET  بطور چشمگیری کاهش می‌یابد، زیرا برای کلیه سکوها، از جمله موبایل، تنها یک .NET  وجود خواهد داشت. ولی حتی در آن زمان نیز نیاز است از برنامه‌ها و وب‌سایت‌هایی که با .NET Framework ساخته شوند پشتیبانی شود، بنابراین مهم است که بدانید شما می‌توانید کتابخانه‌های کلاس استاندارد .NET 2.0 را ایجاد کنید که با سکو‌های.NET  موروثی سازگار باشد.

اطلاعات بیشتر: فهرست نسخه‌های استاندارد .NET  و اینکه کدام سکوها از آنها پشتیبانی می‌کنند در این آدرس آمده‌اند.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

مایکروسافت قول داده که تا پایان سال 2021 یک سکوی .NET واحد بیرون بیاید. قرار است که .NET 6 یک کتابخانه کلاس پایه (BCL) و دو حین‌اجراء داشته باشد، که یکی برای سرورها یا دسکتاپ‌ها (مثلاً وبسایت‌ها و برنامه‌های ویندوزی دسکتاپ که بر پایه حین‌اجراء .NET Core)  بهینه شده، و دیگری برای برنامه‌های موبایل که بر پایه حین‌اجراء Xamarin هستند بهینه شده‌.

زبان میانی

کامپایلر زبان C#  (که Roslyn نام دارد)، توسط ابزار dotnet CLI بکار گرفته می‌شود تا برنامه‌هایC#   را به کُدهای زبان میانی (IL)[7] تبدیل کند و آنها را در یک اسمبلی، یا مجتمع، (که به صورت یک فایل DLL یا EXE است) ذخیره کند. کدهای IL شبیه دستورات زبان اسمبلی هستند و توسط ماشین مجازی .NET (که بعنوان CoreCLR شناخته می‌شود) اجراء می‌شوند.

در زمان اجراء، CoreCLR کدهای IL را از اسمبلی بارگیری می‌کند و کامپایلر ([8]JIT) آنها را به دستورات بومی CPU ترجمه می‌کند، و سپس آنها در CPU کامپیوتر شما اجراء می‌شوند. مزیت این روندِ کامپایلِ سه مرحله‌ای این است که مایکروسافت علاوه بر ویندوز قادر است برای لینوکس و مک‌او‌اس نیز CLRهایی را بسازد. کد IL که در مرحله اول تولید شده، بدلیل اینکه در مرحله دوم به دستورات بومی CPU ترجمه می‌شود، می‌تواند در هر سکویی که مرحله دوم کامپایل را انجام می‌دهد اجراء شود.

صرف‌نظر از اینکه کد مبدا به چه زبانی نوشته شده باشد (مثلاً C#، Visual Basic، یا F#)، کلیه برنامه‌های .NET برای دستورات خودشان از کدهای IL استفاده می‌کنند که در یک اسمبلی ذخیره شده است. مایکروساف و برخی از شرکت‌های دیگر ابزار‌های disassembler، مثل ILSpy، را فراهم آورده‌اند که می‌تواند یک اسمبلی را باز کرده و کدهای IL آنها را آشکار کنند.

مقایسه تکنولوژی‌های مختلف .NET

ما می‌توانیم تکنولوژی‌های مختلف .NET که در سال 2020 موجودند را در جدول زیر خلاصه کنیم:

تکنولوژی

توضیحات

سیستم‌عامل‌های میزبان

.NET 5

پشتیبانی از ویژگی‌های مدرن، پشتیبانی کامل از C# 9، امکان انتقال برنامه‌ها قدیمی و ایجاد برنامه‌های جدید ویندوز و سرویس‌های وب

Windows, macOS, Linux

.NET Framework

پشتیبانی از ویژگی‌های موروثی، پشتیبانی محدود از C# 8، ولی از C# 9 پشتیبانی نمی‌کند،  پشتیبانی از برنامه‌های موجود.

Windows فقط  

Xamarin

فقط برنامه‌های موبایل و دسک‌تاپ.

Android,iOS, macOS

ساختن برنامه‌های کنسولی با استفاده از VSC

هدف این بخش چگونگی ساخت یک برنامه کنسولی توسط Visual Studio Code است. هم دستورات و هم تصاویر این بخش به macOS مربوط هستند، ولی آنها برای Windows و Linux هم کاربرد دارند.

تفاوت عمده در عملیات خط فرمانی، مثلاً حذف فایل‌ها، است. ولی خوشبختانه دستورهای dotnet در کلیه سکوها یکسان است.

نوشتن برنامه با استفاده از VSC

بیایید کار خودمان را شروع کنیم.

1.    Visual Studio Code را باز کنید.

2.    در macOS به File | Open… بروید، در ویندوز به File | Open Folder… بروید. همانطور که در شکل زیر نشان داده شده، در هر دو سیستم عامل می‌توانید از طریق قاب EXPLORER بر روی دکمه Open Folder کلیک کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image009.png

شکل 1.4: Visual Studio Code Welcome tab

3.    در مک‌او‌اس، در دیالوگ باکس به فولدر کاربری خودتان، یا در ویندوز به فولدر Documents، یا هر فولدر دیگری که می‌خواهید پروژه شما در آن ذخیره شود بروید.

4.    بر روی دکمه New Folder بزنید و اسم فولدر ایجاد شده را Code بگذارید.

5.    در فولدر Code فولدر جدیدی بنام Chapter01 ایجاد کنید.

6.    در فولدر Chapter01 فولدری بنام HelloCS ایجاد کنید.

7.    در مک‌او‌اس فولدر HelloCS را با کلیک کردن روی Open انتخاب کنید، یا در ویندوز روی Select Folder کلیک کنید.

8.    در مک‌او‌اس به View | Terminal بروید، یا در ویندوز دکمه (Ctrl + ') را فشار دهید (کنترل+کوتیشن تکی).

9.           در Terminal دستور زیر را وارد کنید:

Description: Description: dotnet new console

10. شما می‌بینید که دستور dotnet در فولدر جاری یک پروژه کنسولی را  ایجاد کرده، و همانطور که در شکل زیر دیده می‌شود، پنجره EXPLORER دو فایل ایجاد شده، به نام‌های HelloCS.proj  و Program.cs را نشان می‌دهد:

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image011.png

شکل 1.5: پنجره EXPLORER باید دو فایلی که ایجاد شده را نشان دهد.

11. در EXPLORER بر روی فایل Program.cs کلیک کنید تا در پنجره ویرایش باز شود. اگر اولین بار است که اینکار را انجام می‌دهید، ممکن است VSC مجبور باشد برخی وابستگی‌های C#، مثل OmniSharp، Razor Language Server، و .NET Core debugger را دانلود و نصب کند.

12. اگر پیامی را گرفتید که می‌گوید دارایی‌های (assets) لازم وجود ندارند، همانطور که در شکل زیر نشان داده شده بر روی Yes کلیک کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image012.png

شکل 1.6: پیام هشدار در مورد اضافه کردن دارایی‌های لازم

13. بعد از چند لحظه، فولدری بنام .vscode در EXPLORER ظاهر می‌شود. در این فولدر چند فایل قرار دارد که در طول اشکالزدایی (debugging) از آنها استفاده می‌شود (توضیحات مفصل‌تر در فصل 4 ).

14. در خط 9 فایل Program.cs، رشته "Hello World!"، را به رشته "Hello C#!" تغییر دهید.

15. به File | Auto Save بروید. این باعث می‌شود قابلیت ذخیره خودکار فعال شود و نیاز نباشد با هر تغییر در برنامه آن را save کنید.

کامپایل و اجراء برنامه با استفاده از dotnet CLI

کار بعدی ما این است که برنامه را کمپایل کرده و سپس آن را اجراء کنیم:

1.    به View | Terminal بروید و در داخل ترمینال دستور زیر را وارد کنید:

Description: Description: dotnet run

2.    همانطور که در شکل زیر دیده می‌شود، خروجی پنجره TERMINAL نتیجه اجراء برنامه‌ شما را نشان می‌دهد:

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image014.png

شکل 1.7: خروجی برنامه شما

نوشتن برنامه‌های سطح-بالا

ممکن است تصور کنید که تنها برای اینکه پیام Hello, C#! روی صفحه چاپ شود، برنامه فوق زیاد از حد طولانی بود، ولی آیا راه ساده‌تری هم هست؟

خوب، در C# 9 چنین چیزی هست و برنامه‌های سطح-بالا (top-level programs) نامیده می‌شود.

بیایید یک برنامه کنسولی قدیمی را در زیر ببینیم:

Description: Description: using System;

class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}

در زیر یک برنامه حداقلیِ سطح-بالا که معادل برنامه فوق باشد را می‌بینید:

Description: Description: using System;

Console.WriteLine("Hello World!");

این نسبت به برنامه‌های قدیمی خیلی ساده‌تر است، اینطور نیست؟ این بهتر از این است که شما کارتان را با یک فایل خالی شروع کنید و خودتان همه دستورات را بنویسید.

کلیه کدهای لازم و جاگیر که کلاس Program و متد Main آن را تعریف می‌کنند، بطور خودکار در هنگام کامپایل به برنامه اضافه شده و به دور عباراتی که شما نوشته‌اید پیچیده می‌شود. ولی هنوز هم کلیه دستورات using باید در بالای فایل نوشته شوند. در یک پروژه، فقط یک فایل مثل این می‌تواند وجود داشته باشد.

من خودم شخصاً وقتی C# تدریس می‌کنم، از همان الگوی سنتی برای پروژه‌ها استفاده می‌کنم، زیرا واقعیت را واضح‌تر نشان می‌دهد. درست به همین دلیل من کار کردن با GUIهایی که برای ساده‌تر کردن کارها عناصری را پنهان می‌کنند را نیز دوست ندارم.

برای مثال، در یک برنامه کنسولی اگر نیاز داشته باشید که آرگومان‌هایی را به برنامه بدهید، در یک برنامه سطح-بالا شما دقیقاً باید با این حقیقت آشنا باشید که پارامترهای بنام args وجود دارند، هر چند نمی‌توانید آن را ببینید.

دانلود پاسخ سوالات از مخزن GitHub

امروزه Git یک سیستم متداول برای مدیریت منبع برنامه است. نام شرکت، وب‌سایت، و برنامه دسک‌تاپی که کار مدیریت Git را آسان‌تر می‌کند GitHub است. در سال 2018 مایکروسافت GitHub را خرید، بنابراین Git یکپارچگی خودش را با ابزارهای این شرکت حفظ خواهد کرد.

من برای ذخیره جواب تمرین‌هایی که در انتهای هر فصل آمده‌اند از GitHub استفاده کرده‌ام. شما می‌توانید برای دسترسی به منبع این فصل به آدرس https://github.com/markjprice/cs9dotnet5 رجوع کنید.

توصیه می‌کنم لینک بالا را به لیست bookmarkهای خودتان اضافه کنید، زیرا من از مخزن GitHub برای کلیه موارد مربوط به این کتاب، از جمله تغییرات و غلط‌نامه این کتاب استفاده خواهم کرد.

استفاده از Git در Visual Studio Code

VSC از Git پشتیبانی می‌کند، ولی از Git نصب شده بر روی کامپیوتر شما استفاده می‌کند، بنابراین به منظور استفاده از Git در VSC، شما باید از قبل Git 2.0، یا نسخه بالاتر آن، را نصب کرده باشید.

توسط این لینک می‌توانید Git را نصب کنید.

اگر دوست دارید با برنامه GUI کار کنید، از طریق آدرس زیر می‌توانید برنامه دسک‌تاپ GitHub را دانلود کنید:

https://desktop.github.com

کپی‌برداری از مخزن جواب‌ تمرین‌های این کتاب

اجازه دهید تا مخزن جواب تمرین‌های کتاب را کپی‌برداری (clone) کنیم.

1.    در فولدر Documents، یا هر فولدری که می‌خواهید جواب تمرین‌های کتاب ذخیره شود، فولدری بنام Repos ایجاد کنید.

2.    از داخل VSC، فولدر Repos را باز کنید.

3.    به View | Terminal بروید و دستور زیر را وارد کنید:

Description: Description: git clone https://github.com/markjprice/cs9dotnet5.git

4.    توجه داشته باشید که کپی تمرین‌ها بر روی کامپیوتر شما ممکن است چند دقیقه طول بکشد.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image018.png

شکل 1.8: کپی‌برداری از جواب تمرین‌های کتاب

 اطلاعات بیشتر: برای اطلاع از کنترل نسخه منبع در VSC به این آدرس رجوع کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

جستجو برای کمک

این بخش درباره چگونگی یافتن اطلاعات مربوط به برنامه‌نویسی در وب است.

خواندن مستندات مایکروسافت

معتبرترین منبع برای کمک گرفتن در مورد ابزارهای برنامه‌نویسی مایکروسافت Microsoft Docs است، که شما می‌توانید از طریق لینک https://docs.microsoft.com  به آن دسترسی پیدا کنید.

کمک گرفتن درمورد ابزارهای dotnet

با استفاده از خط فرمان  dotnet شما می‌توانید در مورد دستورات آن کمک بگیرید.

1.    برای باز کردن مستندات رسمی برای دستور dotnet new، در پنجره مرورگر دستور زیر را در ترمینال VSC وارد کنید:

Description: Description: dotnet help new

2.    برای نمایش کمک در کنسول، مانند زیر از فلگ -h  یا  --helpاستفاده کنید:

Description: Description: dotnet new console -h

3.    شما یک خروجی شبیه زیر را خواهید گرفت:

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image021.png

گرفتن تعاریف مربوط به کلاس‌ها و اعضای آنها

یکی از مفیدترین کلیدهای میانبر در VSC کلید F12  است، که از آن برای رفتن به Go To Definition استفاده می‌شود. با اینکار تعاریف عمومی یک گونه و اعضای آن از طریق خواندن فراداده‌هایی که در اسمبلی کامپایل شده‌اند نمایش داده می‌شود. برخی از ابزارها، مثل ILSpy .NET Decompiler حتی می‌توانند فراداده‌ها را خوانده و کدهای IL را دوباره به کدهای C# تبدیل کنند.

برای مشاهده طریق استفاده از ویژگی Go To Definition مراحل زیر را انجام دهید:

1.    در VSC فولدر HelloCS را باز کنید.

2.    در فایل Program.cs,  متد  Mainرا تغییر دهید و یک متغیر بنام z را اعلان کنید:

int z;

3.    روی int کلیک کرده و دکمه F12 را فشار دهید، و یا کلیک راست کرده و Go To Definition را انتخاب کنید. شما می‌توانید چگونگی تعریف گونه int را در داخل پنجره‌ جدیدی که ظاهر می‌شود مشاهده کنید:

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image022.png

شکل 1.9: تعریف گونه int.

در اینجا شما می‌توانید ببینید که int:

·        با استفاده از کلیدواژه struct تعریف شده.

·        در داخل اسمبلی System.Runtime قرار دارد.

·        در فضای اسمی System است.

·        نام اصلی آن Int32 است.

·        در نتیجه int یک نام مستعار برای گونه System.Int32  است.

·        اینترفیس‌هایی نظیر IComparable را پیاده‌سازی کرده است.

·        برای مقادیر بیشنه و کمینه خودش دارای مقادیر ثابتی است.

·        متدهایی مثل Parse دارد.

روش‌های خوب: هنگامی که از Go To Definition اسفاده می‌کنید، برخی اوقات ممکن است پیام خطای No definition found را دریافت کنید. دلیل این مورد این است که افزونه C# چیزی درباره پروژه جاری نمی‌داند. به View | Command Palette بروید، OmniSharp: Select Project را وارد کرده و آن را انتخاب کنید، و سپس پروژه صحیحی که می‌خواهید با آن کار کنید را انتخاب کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image003.png

بدلیل اینکه شما با اصطلاحاتی که Go To Definition به شما نشان می‌دهد آشنا نیستید، فعلاً این ویژگی برای شما خیلی مفید نیست.

زمانی که به انتهای قسمت اول این کتاب، که C# را به شما یاد می‌دهد، رسیدید، آنگاه به اندازه کافی از این زبان اطلاع دارید، و خواهید دید که چقدر می‌تواند برای شما مفید باشد.

4.    در پنجره ویرایش برنامه پایین بیاید تا به متد Parse برسید که تنها یک پارامتر از نوع string می‌گیرد. در آنجا (خط 87) توضیحات مربوط به این متد را می‌بینید:

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image023.png

شکل 1.10: توضیحات مربوط به متد Parse.

در این توضیحات شما می‌بینید که مایکروسافت اعتراضاتی که ممکن است در طول فراخوانی این متد رخ دهد را مستند کرده، از جمله ArgumentNullException, FormatException,  و OverflowException. حالا ما میدانیم که چرا نیاز است در هنگام فراخوانی این متد باید آن را در داخل یک عبارت try بپیچیم.

امیدوارم برای یادگرفتن معنی این اصطلاحات حوصله داشته باشید!

کمی صبور باشید. شما تقریباً به انتهای این فصل رسیده‌اید، و در فصل بعد با جزئیات زبان C# آشنا خواهید شد. ولی بیایید ببینیم برای کمک گرفتن چه جاهای دیگری را می‌توانید جستجو کنید.

جستجو برای جواب‌ها در سایت Stack Overflow

Stack Overflow پرطرفدارترین وب‌سایت برای کمک گرفتن در مورد سئوالات دشوار برنامه‌نویسی است. محبوبیت این سایت چنان زیاد است که موتورهای جستجو مثل DuckDuckGo روش‌ خاصی برای نوشتن پرس و جو در این سایت دارند.

1.    مرورگر خودتان را باز کنید.

2.    به سایت DuckDuckGo.com بروید، و پرسمان (query) زیر را وارد کنید و به نتایج جستجو، که آنها نیز در زیر نشان داده شده‌اند، توجه کنید:

!so securestring

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image024.png

شکل 1.11: نتایج جستجو در سایت Stack Overflow  برای  securestrin.

جستجو برای جواب‌ها در سایت Google

با گزینه‌هایی که Google دارد، شما می‌توانید جستجوهای پیشرفته‌ای را انجام دهید، و آنچه نیاز دارید را پیدا کنید:

1.    به google.com بروید.

2.    با یک پرسمان ساده، عبارت garbage collection را جستجو کنید. شما پیش از اینکه اطلاعاتی درمورد garbage collection که به علوم کامپیوتری ربط دارد را از سایت ویکی‌پدیا ببینید، احتمالاً در ابتدای فهرست اطلاعات زیادی درمورد چگونگی جمع آوری زباله در محله خودتان را خواهید دید!

3.    شما می‌توانید نتایج جستجوی خودتان را به سایت‌هایی مثل Stack Overflow محدود کنید. همچنین می‌توانید با ذکر C#+، فقط بر روی سی‌شارپ متمرکز شوید، و زبان‌هایی مثل java را حذف کنید.

garbage collection site:stackoverflow.com +C# -Java

تمرین‌ها و کاوش‌های بیشتر

حالا اجازه دهید با مطرح کردن چند سوال و تحقیق، معلومات و آگاهی شما از آنچه در این فصل یادگرفتید را محک بزنیم.

تمرین 1.1 آزمودن معلومات شما

سعی کنید به سوالات زیر پاسخ دهید، بخاطر داشته باشید که جواب برخی از سوالات را می‌توانید در همین فصل پیدا کنید، ولی پاسخ برخی دیگر نیز به جستجو در اینترنت یا برنامه‌نویسی نیاز دارد:

1.    چرا برنامه‌نویسان برای برنامه‌نویسی .NET می‌توانند از زبان‌های مختلفی مثل C#، F# استفاده کنند؟

2.    شما برای ایجاد یک برنامه کنسولی چه چیزی را باید تایپ کنید؟

3.    برای ساختن و اجراء کردن یک برنامه C# چه چیزی را باید تایپ کنید؟

4.    کلید میانبر برای نمایش ترمینال در VSC چیست؟

5.    آیا Visual Studio 2019 از VSC بهتر است؟

6.    آیا .NET Core از .NET Framewo‌rk بهتر است؟

7.    استاندارد .NET چیست و چرا هنوز مهم است؟

8.    نام متدی که در برنامه‌های کنسولی نقطه ورودی محسوب می‌شود چیست و چگونه باید اعلان شود؟

9.    کجا می‌توان یک کلیدواژه C# را جستجو کرد؟

10. از چه منابعی می‌توانید برای کمک گرفتن درمورد مشکلات برنامه‌نویسی کمک گرفت؟

تمرین 1.2 - C# را در همه جا تمرین کنید

برای نوشتن برنامه‌های C# نیازی به VSC یا حتی Visual Studio 2019 یا Visual Studio 2019 for mac    حتی زی به تمرین کنیدمورد مشکلات برنامه تایپ کنید؟

ه جستجو در اینترنت یا نوشتن  ندارید. شما می‌توانید به .NET Filddle بروید و بصورت آنلاین شروع به برنامه‌نویسی کنید.

تمرین 1.3 – موضوعات تحقیقاتی

شما می‌توانید با دنبال کردن آدرس‌های زیر جزئیات بیشتری را درمورد موارد مطرح شده در این فصل بخوانید:

 

•        Visual Studio Code documentation:

https://code.visualstudio.com/docs

•        .NET:

https://dotnet.microsoft.com

•        .NET Core Command-Line Interface (CLI) tool:

https://aka.ms/dotnet-cli-docs

•        .NET Core runtime, CoreCLR:

https://github.com/dotnet/runtime

•        .NET Core Roadmap:

https://github.com/dotnet/core/blob/master/roadmap.md

 •       .NET Standard FAQ:

https://github.com/dotnet/standard/blob/master/docs/faq.md

•        Stack Overflow:

https://stackoverflow.com/

•        Google Advanced Search:

https://www.google.com/advanced_search

•        Microsoft Learn:

https://docs.microsoft.com/en-us/learn/

•        .NET Videos:

https://dotnet.microsoft.com/learn/videos

•           Microsoft Channel 9 – .NET Videos:

https://channel9.msdn.com/Search?term=. net&lang-en=true

خلاصه

در این فصل ما این کارها را انجام دادیم:

·        محیط برنامه‌نویسی شما را برپا کردیم.

·        تفاوت‌هایی که بین .NET 5, .NET Core, .NET Framework, Xamarin,  و  .NET Standard بود را شرح دادیم.

·        برای ایجاد یک برنامه ساده کنسولی از Visual Studio Code و .NET SDK استفاده کردیم.

·        یادگرفتیم چگونه از مخزن GitHub جواب‌ تمرین‌های این کتاب را دانلود کنیم.

·        و از همه مهمتر، یاد گرفتیم از چه طریقی می‌توانیم کمک بگیریم.

در فصل بعد شما یاد خواهید گرفت که چگونه به زبان C# صحبت کنید.


فصل 2

16/09/99

صحبت به زبان C#

این فصل درباره اصول زبان برنامه‌نویسی C# است. در طولِ این فصل شما یادخواهید گرفت که چگونه با استفاده از دستور زبان C# عبارات مختلفی را بنویسید. همچنین با واژگان روزمره متداول در این زبان آشنا می‌شوید. علاوه براین، در انتهای فصل شما به اندازه کافی اعتماد به نفس خواهید داشت تا اطلاعاتی را بطور موقت در حافظه کامپیوتر ذخیره کرده و با آنها کار کنید.

در این فصل موارد زیر پوشش داده می‌شود:

·        مقدمه‌ای بر C#

·        درک اصول اولیه C#

·        کار با متغیرها

·        کار با مقادیر null

·        بررسی‌ بیشتر برنامه‌های کنسولی

مقدمه‌ای  بر C#

این بخش از کتاب درباره زبان C# است، یعنی دستور زبان و واژگانی که شما هر روزه در این زبان از آنها استفاده می‌کنید تا برنامه بنویسید.

زبان‌های برنامه‌نویسی شباهت‌های زیادی با زبان‌های انسانی دارند، با این تفاوت که در زبان‌های برنامه‌نویسی شما خودتان می‌توانید لغاتی را بسازید.

درک نسخه‌ها و ویژگی‌های C#

این بخش از کتاب، اصولی از زبان برنامه‌نویسی C# را توضیح می‌دهد که عمدتاً برای مبتدیان نوشته شده، بنابراین پوشش دهنده موضوعات اساسی است که همه برنامه‌نویسان باید آنها را بدانند، از اعلان (declare) متغیر‌ها گرفته تا ذخیره داده‌ها و چگونگی تعریف گونه‌های سفارشی جدید. فعلاً موضوعات مبهمی، مثل نسبت ‌دهی مجددِ متغیرهای محلی ref و گونه‌های ارجاعی و مقداری توضیح داده نمی‌شوند.

این کتاب کلیه ویژگی‌های زبان‌ C# را پوشش می‌دهد، از نسخه 1.0 گرفته تا آخرین نسخه آن، یعنی 9.0. درصورتی که شما از قبل با نسخه‌های اولیه C# آشنایی دارید و می‌خواهید با ویژگی‌هایی آشنا شوید که در آخرین نسخه‌های C# ارائه شده، من با فهرست کردن نسخه‌های مختلف این زبان، اینکار را برای شما آسانتر کرده‌ام.

اطلاعات بیشتر: شما می‌توانید با مراجعه به این آدرس اطلاعات بیشتری را درمورد وضعیت جاری زبان C# کسب کنید

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

C# 1.0

C# 1.0 در سال  2002 بیرون آمد، و همانگونه که در فصل‌های 2 الی 6 خواهید دید، شامل کلیه ویژگی‌های مهم یک زبان ایستا گونه (statically typed) و شیء‌گرای مدرن است.

C# 2.0

C# 2.0 در سال 2005 بیرون آمد و روی فعال کردن گونه‌های قوی توسط ژنریک‌ها (generics)، بهبود سرعت اجراء برنامه و کاهش خطاهای گونه، از جمله موارد زیر تمرکز داشت:

ویژگی

فصل

موضوع

گونه‌های نول‌پذیر

2

قابلیت نول‌پذیری یک گونه مقداری.

ژنریک‌ها

6

قابلیت استفاده مجدد بیشتر با استفاده از ژنریک‌ها

C# 3.0

C# 3.0 در 2007 بیرون آمد و بر روی زبان LINQ (یا زبان پُرس‌‌و‌جوی یکپارچه) و خصوصیاتی مثل گونه‌های بی‌نام و عبارات لاندا تمرکز داشت:

ویژگی

فصل

موضوع

متغیرهای محلی با گونه‌های تعریف‌شده بصورت ضمنی

2

استنتاج گونه یک متغیر محلی.

LINQ

12

کلیه موضوعات مطرح شده در فصل 12

C# 4.0

C# 4.0 در 2010 بیرون آمد و بر روی بهبود قابلیت کار میان زبان‌های پویا مثل F# و Python تمرکز داشت.

ویژگی

فصل

موضوع

گونه‌های پویا

2

گونه dynamic.

آرگومان‌های اسم‌دار و اختیاری

5

پارامتر‌های اختیاری و آرگومان‌های اسم‌دار

C# 5.0

C# 5.0 در 2012 بیرون آمد و بر روی ساده‌تر کردن عملیات غیرهمزمان تمرکز داشت:

ویژگی

فصل

موضوع

ساده‌تر کردن کارهای غیرهمزمان

13

 درک async و await

 

C# 6.0

C# 6.0 در 2015 بیرون آمد و بیشتر درمورد بهسازی ‌های اندکی بود که بر روی این زبان صورت گرفته:

ویژگی

فصل

موضوع

واردات پویا

2

آسانتر کردن استفاده از کنسول

رشته‌های درون‌یابی شده

2

نمایش خروجی به کاربر

 

6

تعریف خاصه‌های فقط-خواندنی

C# 7.0                             

C# 7.0 در 2017 بیرون آمد و بر روی اضافه کردن ویژگی‌های زبان‌های تابعی، مثل چند‌تایی‌ها (tuples) و تطبیق الگو تمرکز دارد:

ویژگی

فصل

موضوع

لفظ‌های دو دویی و جداکننده ارقام

2

ذخیره اعداد صحیح

تطبیق الگو

3

تطبیق الگو توسط عبارت if

متغیرهای out

5

کنترل چگونگی فرستادن پارامترها

چندتایی‌ها

5

ترکیب چندین مقدار با استفاده از چندتایی‌ها

توابع محلی

6

تعریف توابع محلی

C# 8.0

C# 8.0 در 2019 بیرون آمد و شامل تغییرات اندکی در رابطه با چگونگی رسیدگی به null بود:

ویژگی

فصل

موضوع

گونه‌های نول‌پذیر ارجاعی

2

امکان نول‌پذیری یک گونه ارجاعی

عبارات switch

3

ساده کردن عبارت switch

متدهای اینترفیس پیش‌فرض

6

متدهای اینترفیس پیش‌فرض

C# 9.0

C# 9.0 در 2020 بیرون آمد و بر روی گونه‌های رکوردی، بهسازی تطبیق الگو، و برنامه‌های کنسولی با حداقل خطوط تمرکز دارد.

ویژگی

فصل

موضوع

برنامه کنسولی با حداقل خطوط

1

برنامه‌های سطح-بالا

تطبیق الگوی بهسازی شده

5

تطبیق الگو با اشیاء

رکوردها

5

کار با رکوردها

 

مشخص کردن نسخه کامپایلر C#

با بیرون آمدن نسخه‌های C# 7.x مایکروسافت تصمیم گرفت نسخه‌های فرعی متعددی را بیرون دهد.

کامپایلرهای زبان .NET برای C# و Visual Basic به همراه کامپایلر F#، که Roslyn  نامیده می‌شوند، بصورت بخشی .NET SDK توزیع می‌شوند. همانطور که در جدول زیر نشان داده شد، برای استفاده از نسخه خاصی از C# شما باید حداقل نسخه‌ای از .NET SDK را نصب کرده باشید:

.NET SDK

Roslyn

C#

1.0.4

2.0 - 2.2

7.0

1.1.4

2.3 - 2.4

7.1

2.1.2

2.6 - 2.7

7.2

2.1.200

2.8 - 2.10

7.3

3.0

3.0 - 3.4

8.0

5.0

5.0

9.0

 

 اطلاعات بیشتر: شما می‌توانید با مراجعه به این آدرس فهرست نسخه‌های مختلف کامپایلر C# را مشاهده کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

حالا بیایید ببینیم نسخه .NET SDK و کامپایلر زبان C# شما چیست:

1.    VSC را اجراء کنید.

2.    به View | Terminal بروید.

3.    برای تعیین نسخه .NET SDK خودتان دستور زیر را وارد کنید:

5.            

Description: Description: dotnet --version

4.    توجه داشته باشید که در زمان نوشتن این کتاب آخرین نسخه 5.0.100 است. این شماره حاکی از نسخه اصلی SDK است که بدون هیچ رفع‌اشکال یا ویژگی‌های جدید بیرون داده شده.

6.            

Description: Description: 5.0.100

5.    برای تعیین اینکه شما چه نسخه‌ای از کامپایلر C# را دارید، دستور زیر را وارد کنید:

Description: Description: csc -langversion:?

6.    کلیه نسخه‌های موجود در زمان نوشتن این کتاب بصورت زیر هستند:

7.            

Description: Description: Supported language versions:
default
1
2
3
4
5
6
7.0
7.1
7.2
7.3
8.0
9.0 (default) latestmajor preview latest

 

 اطلاعات بیشتر: اگر در ویندوز دستور بالا را وارد کنید یک پیام خطا می‌گیرید. برای رفع این اشکال به آدرس رجوع کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

برای ادامه مطالعه این فصل، با مراجعه به این آدرس، نسخه PDF آن را تهیه فرمایید.

 

 


فصل 3

25/09/99

کنترل روند برنامه و تبدیل گونه‌ها

ما در این فصل درباره انجام عملیات ساده بر روی متغیرها، تصمیم‌گیری، انطباق الگو، تکرار بلوکی از عبارات، تبدیل یک گونه‌ به گونه‌های دیگر، رسیدگی به اعتراضات، و بررسی سرریز متغیرهای عددی صحبت خواهیم کرد.

این فصل موارد زیر را پوشش می‌دهد:

·        عملیات بر روی متغیرها

·        عبارات انتخاب کننده

·        عبارات تکرار کننده

·        قالب‌گیری و تبدیل گونه‌ها

·        رسیدگی به اعتراضات

·        بررسی سرریز

انجام عملیات بر روی متغیرها

کاری که عملگرها (Operators) می‌کنند انجام عملیات ساده‌، مثل جمع و ضرب، بر روی عملوندهایی (operands)، مثل متغیرها و مقادیر لفظی، است. آنها معمولاً مقدار جدیدی را بازمی‌گردانند که نتیجه عمل مورد نظر است و می‌تواند به یک متغیر نسبت داده شود.

بیشتر عملگرها دوتایی هستند، که یعنی آنها بر روی دو عملوند کار می‌کنند:

Description: Description: var نتیجه = عملوند اول عملگر عملوند دوم;

برخی از عملگرها یکتایی (unary) هستند، که یعنی تنها بر روی یک عملوند کار می‌کنند، و می‌توانند پیش یا بعد از عملوند بکار روند:

Description: Description: var resultOfOperation = onlyOperand operator;
var resultOfOperation2 = operator onlyOperand;

مثال‌هایی از عملگرهای یکتایی شامل افزایش‌دهنده‌ها و گرفتن اندازه یک گونه بر حسب بایت هستند:

Description: Description: int x = 5;
int incrementedByOne = x++;
int incrementedByOneAgain = ++x;
Type theTypeOfAnInteger = typeof(int);
int howManyBytesInAnInteger = sizeof(int);

ما همچنین عملگر سه‌تایی نیز داریم که بر روی سه عملوند کار می‌کند.

عملگرهای یکتایی

دو تا از متداول‌ترین عملگرها یکتایی، عملگر افزاینده (++)، و عملگر کاهنده (--) هستند. بیایید به چند مثال در اینمورد توجه کنیم:

1.    اگر فصل قبل را مطالعه کرده باشید، آنگاه شما از قبل در فولدر کاربری خودتان فولدری بنام Code را دارید. در غیراینصورت، آن را ایجاد کنید.

2.    در داخل فولدر Code فولدر جدیدی بنام Chapter03 ایجاد کنید.

3.    برنامه VSC را اجراء کنید، و اگر فضای‌کاری یا فولدری باز هست آن را ببندید.

4.    فضای کاری جاری را در داخل Chapter03 بنام Chapter03.code-workspace ذخیره کنید.

5.    فولدر جدیدی بنام Operators ایجاد کنید و آن را به فضای کاری Chapter03 اضافه کنید.

6.    به Terminal | New Terminal بروید.

7.    در داخل ترمینال، دستور ایجاد یک برنامه کنسولی جدید را در فولدر Operators صادر کنید.

8.    فایل Program.cs را باز کنید.

9.    بصورت ایستا System.Console را وارد کنید.

10. در داخل متد Main عبارات زیر را وارد کنید، تا دو متغیر بنام‌های a و b، از گونه عدد صحیح را اعلان کرده، به a مقدار 3 را بدهید، و سپس درحالی‌که a را یک واحد افزایش می‌دهید، نتیجه را به b نسبت دهید:

Description: Description: int a = 3;
int b = a++;
WriteLine($"a is {a}, b is {b}");

11. قبل از اینکه برنامه را اجراء کنید از خودتان سوال کنید ”مقدار b چه خواهد بود؟“ هنگامی که جواب را پیدا کردید، برنامه کنسولی را اجرا کنید، و نتیجه‌ای که بدست آورده بودید را با نتیجه واقعی مقایسه کنید.

Description: Description: a is 4, b is 3

دلیل اینکه مقدار b هنوز 3 است این است که عملگر ++ پس از نسبت‌دهی انجام می‌شود، و دراینصورت یک عملگر پس‌وندی (postfix) نامیده می‌شود. اگر لازم است افزایش متغیر پیش از نسبت‌دهی انجام شود، از عملگر پیش‌وندی (prefix) استفاده کنید.

12. از عبارات فوق کپی گرفته و آنها را در زیر خطوط قبلی الحاق کنید، و سپس آنها را بصورت زیر تغییر دهید، تا بجای عملگر افزاینده پس‌وندی، از عملگر افزاینده پیش‌وندی استفاده شود:

Description: Description: int c = 3;
int d = ++c; // increment c before assigning it
WriteLine($"c is {c}, d is {d}");

13. برنامه کنسولی را اجراء کرده و به خروجی آن توجه کنید:

Description: Description: a is 4, b is 3
c is 4, d is 4

 

روش‌های خوب: بدلیل سردرگمی که در استفاده از عملگرهای پیش‌وندی و پس‌وندیِ افزایشی و کاهشی، و ترکیب آنها با نسبت‌دهی وجود دارد، من توصیه می‌کنم که هیچ وقت عملگرهای ++ و -- را با یک عملگر نسبت‌دهی (=) ترکیب نکنید. در صورت لزوم، هر کدام از آنها را بشکل عبارات جداگانه انجام دهید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image003.png

عملگرهای حسابی دوتایی

عملگرهای کاهش و افزایش، عملگرهای حسابی یکتایی هستند. عملگرهای حسابی دیگر معمولاً دوتایی  هستند و بر روی دو عدد صورت می‌گیرند:

1.    عبارات زیر را در انتهای متد Main اضافه کنید تا چگونگی کارکردِ پنج عملگر متداول حسابی را مشاهده کنید:

Description: Description: int e = 11;
int f = 3;
WriteLine($"e is {e}, f is {f}");
WriteLine($"e + f = {e + f}");
WriteLine($"e - f = {e - f}");
WriteLine($"e * f = {e * f}");
WriteLine($"e / f = {e / f}");
WriteLine($"e % f = {e % f}");

2.    برنامه کنسولی را اجرا کرده و به نتایج آن توجه کنید:

Description: Description: e is 11, f is 3
e + f = 14
e - f = 8
e * f = 33
e / f = 3
e % f = 2

برای درک عملگر تقسیم /، و باقیمانده‌گیری %، شما باید درسهای مدرسه ابتدایی را بخاطر آورید. فرض کنید شما یازده شکلات و سه دوست دارید. چگونه می‌توانید شکلات‌ها را بین دوستانتان تقسیم کنید؟ شما می‌توانید به هر نفر از دوستانتان سه شکلات بدهید، و دو تا برایتان باقی می‌ماند. آن دو شکلات هم‌نهشتی (modulus) نام دارند، که باقیمانده تقسیم نیز هست. اگر شما دوازده شکلات داشتید، در آنصورت هر یک از دوستان چهار شکلات را می‌گرفتند، و هیچ شکلاتی باقی نمی‌ماند، بنابرای باقیمانده تقسیم 0 خواهد بود.

برای ادامه مطالعه این فصل، با مراجعه به این آدرس، نسخه PDF آن را تهیه فرمایید.

 

 


فصل 4

30/09/99

نوشتن، رفع‌اشکال، و آزمایش توابع

این فصل درباره نوشتن توابع و استفاده مجدد از برنامه‌ها، اشکال‌زدایی خطاهای منطقی در طول برنامه‌نویسی، ثبت اعتراضات در طول زمان-اجراء، و آزمایش واحدی برای حذف اشکالات و اطمینان از پایداری و کیفیت برنامه است.

این فصل موارد زیر را پوشش می‌دهد:

·        نوشتن توابع

·        اشکال‌زدایی در طول برنامه‌نویسی

·        وقایع‌نگاری در طول اجراء

·        آزمایش واحدی

نوشتن توابع

یک اصل مهم در برنامه‌نویسی این است که کار تکراری نکنید (DRY[9]).

اگر شما در هنگام برنامه‌نویسی حس کنید که دارید عباراتی را بارها و بارها تکرار می‌کنید، در اینصورت باید این عبارات را به یک تابع تبدیل کنید. توابع مانند برنامه‌های کوچکی هستند که یک وظیفه کوچک را انجام می‌دهند. برای مثال ممکن است شما تابعی را بنویسید که مالیات فروش را حساب کند و سپس از آن تابع در بسیاری از برنامه‌های مالی که می‌نویسید مجدداً استفاده کنید.

مانند برنامه‌ها، توابع نیز معمولاً ورودی‌ها و خروجی‌هایی دارند. برخی اوقات توابع را بعنوان جعبه‌های سیاهی توصیف می‌کنند که از یک طرف مواد خام را به آنها می‌دهید، و از طرف دیگر یک جنس ساخته شده را تحویل می‌گیرید. هنگامی که تابعی ساخته شد، نیازی نیست که در مورد چگونگی کار آن نگران باشید.

فرض کنید می‌خواهید به فرزند خودتان کمک کنید تا جدول ضرب را بهتر یاد بگیرد، بنابراین شما می‌خواهید کلیه مضرب‌های یک عدد، مثل 12، را تولید کنید:

Description: Description: 1 x 12 = 12
2 x 12 = 24
...
12 x 12 = 144

شما قبلاً چگونگی کار با عبارت for را یادگرفتید، بنابراین می‌دانید هنگامی که یک الگوی ثابت، مثل مضرب‌های 12، وجود دارد، می‌توان از عبارت for برای تولید خطوط تکراری استفاده کرد:

Description: Description: for (int row = 1; row <= 12; row++)
{
Console.WriteLine($"{row} x 12 = {row * 12}");
}

نوشتن یک تابعِ جدول ضرب

بیایید با ایجاد تابعی که یک جدول ضرب را نمایش می‌دهد توابع را بیشتر بررسی کنیم:

1-   در فولدر code فولدری بنام Chapter04 ایجاد کنید.

2-    برنامه VSC را اجراء کنید. تمام فولدرها یا فضاهای‌کاریِ باز را ببیندید، و فضای کاری جاری را بنام Chapter04.code-workspace ذخیره کنید.

3-    در فولدر Chapter04 فولدری بنام WritingFunctions ایجاد کرده و آن را به فضای کاری اضافه کنید، سپس یک برنامه کنسولی جدید را در WritingFunctions ایجاد کنید.

4-    فایل Program.cs را بصورت زیر تغییر دهید:

Description: Description: using static System.Console;

namespace WritingFunctions
{
class Program
{
static void TimesTable(byte number)
{
WriteLine($"This is the {number} times table:");

for (int row = 1; row <= 12; row++)
{
WriteLine($"{row} x {number} = {row * number}");
}
WriteLine();
}

static void RunTimesTable()
{
bool isNumber; do
{
Write("Enter a number between 0 and 255: ");

isNumber = byte.TryParse( ReadLine(), out byte number);

if (isNumber)
{
TimesTable(number);
}
else
{
WriteLine("You did not enter a valid number!");
}
}
while (isNumber);
}

static void Main(string[] args)
{
RunTimesTable();
}
}
}

در برنامه فوق به موارد زیر توجه کنید:

·        گونه Console را بطور ایستا وارد کنید تا آسانتر بتوانید متدهایی مثل WriteLine را فراخوانی کنید.

·        ما تابعی بنام TimesTable را نوشتیم که باید یک مقدار byte بنام number را به آن بفرستیم.

·        TimesTable هیچ مقداری را به فراخواننده خودش بازنمی‌گرداند، بنابراین آن را با کلیدواژه void  اعلان کرده‌ایم.

·        TimesTable از عبارت for استفاده می‌کند تا جدول ضرب عددی که  به آن فرستاده شده را نمایش دهد.

·        ما تابعی بنام RunTimesTable نوشته‌ایم که از کاربر درخواست می‌کند عددی را وارد کند، و سپس تابع با فرستاندن این عدد به تابع TimesTable آن را فراخوانی می‌کند. تا زمانی که کاربر عدد معتبری را وارد کند، حلقه ادامه دارد.

·        ما RunTimesTable را در متد Main فراخوانی کرده‌ایم.

5-    برنامه کنسولی را اجراء کنید.

6-    عدد مجازی، مثل 6، را وارد کنید، و سپس نتیجه را مشاهده کنید:

Description: Description: Enter a number between 0 and 255: 6 This is the 6 times table:
1 x 6 = 6
2 x 6 = 12
3 x 6 = 18
4 x 6 = 24
5 x 6 = 30
6 x 6 = 36
7 x 6 = 42
8 x 6 = 48
9 x 6 = 54
10 x 6 = 60
11 x 6 = 66
12 x 6 = 72

 

نوشتن تابعی که مقداری را بازمی‌گرداند

تابع قبلی عملیاتی را انجام می‌داد (یک حلقه را طی می‌کرد و چیزی را در کنسول می‌نوشت)، ولی مقداری را باز نمی‌گرداند. ولی فرض کنید بخواهیم مالیات بر افزش افزوده (VAT) را حساب کنیم. در اروپا VAT می‌تواند بین %8 (در سوئیس) تا %27 (در مجارستان) باشد. در ایالات متحده، مالیاتِ ایالتیِ فروش می‌تواند بین %0 (در اورگون) تا %8.25 (در کالیفرنیا) باشد:

برای ادامه مطالعه این فصل، با مراجعه به این آدرس، نسخه PDF آن را تهیه فرمایید.

 


فصل 5

08/10/99

ساخت گونه‌های خودتان توسط برنامه‌نویسی-شیءگرا

این فصل درباره ساخت گونه‌هایِ خوتان با استفاده از برنامه‌نویسی شیءگرا (OOP)[10] است. شما کلیه اعضاء مختلفی که یک گونه می‌تواند داشته باشد را یادخواهید گرفت، از جمله فیلدها که برای ذخیره داده‌ها بکار می‌روند، و متدها که برای انجام فعالیت‌ها از آنها استفاده می‌شود. در این فصل شما از مفاهیم مختلف OOP، مثل تجمیع (aggregation) و لفافه‌بندی (encapsulation) استفاده خواهید کرد. همچنین از ویژگی‌های جدید زبان C# مانند چندتایی‌ها (tuple)، متغیرهای out، نام‌های چندتایی نتیجه‌گرفته شده (inferred tuple names)، و الفاظ پیش‌فرض (default literals) آشنا خواهید شد.

این فصل موارد زیر را پوشش خواهد داد:

·        برنامه‌نویسی شیءگرا

·        ساخت کتابخانه‌های کلاس

·        ذخیره داده‌ها در فیلدها

·        چگونگی نوشتن و فراخوانی متدها

·        کنترل دسترسی با ویژگی‌ها و اینکس‌سازها

·        انطباق الگو با اشیاء

·        کار با رکوردها

برنامه نویسی شیء-گرا

در دنیای واقعی، یک شیء چیزی مثل یک ماشین یا یک شخص است ، درحالیکه در برنامه‌نویسی شیء نمایانگرِ چیزی در جهان واقعی است، چیزهایی مثل محصولات تولیدی یا حساب بانکی، ولی می‌تواند چیزِ انتزاعی‌تری نیز باشد.

در بیشتر مواقع ما برای تعریف گونهِ اشیاء از کلیدواژه class، و در بعضی موارد هم از کلید‌واژه struct استفاده می‌کنیم. شما بعداً در فصل 6، تفاوت میان classها و structها را یادخواهید گرفت. شما می‌توانید گونه (type) یک شیء را بعنوان طرح‌کلی یا الگوی آن شیء در نظر بگیرید.

در زیر مفاهیم کلی برنامه‌نویسی شیء-گرا بطور خلاصه توضیح داده شده است:

·        لفافه‌بندی (Encapsulation): ترکیب داده‌ها و فعالیت‌هایی است که به یک شیء مربوط هستند. برای مثال، یک گونه BankAccount (حساب بانکی) ممکن است داده‌هایی مثل Balance (مانده‌حساب)، AccountName (صاحب ‌حساب)، و عملیاتی مثل Deposit (به ‌حساب ‌گذاشتن)، Withdraw (از حساب برداشتن) را شامل شود. هنگام لفافه‌بندی، شما اغلب می‌خواهید کنترل کنید که چه چیزی می‌تواند به آن عملیات و داده‌ها دسترسی داشته باشد، مثلاً چگونه وضعیت یک شیء از بیرون می‌تواند مورد دسترسی قرار گیرد یا داده‌های آن تغییر کند.

·        ترکیب (Composition): درباره این است که یک شیء از چه ساخته شده. مثلاً یک ماشین از قطعات مختلفی مثل، چرخ‌ها، صندلی‌ها، موتور، و غیره تشکیل شده.

·        تجمیع (Aggregation):   درباره این است که یک شیء می‌تواند با چه چیزهایی ترکیب شود. برای مثال، یک انسان بخشی از یک شیء ماشین نیست، ولی می‌تواند در صندلی راننده بنشیند و به رانندهِ ماشین بدل شود، بعبارتی اشیاء مختلف در هم تجمیع می‌شوند تا مولفه (component) جدیدی را تشکیل دهند.

·        وراثت (Inheritance):  درباره استفاده مجدد از برنامه‌ها موجود است. به این صورت که از یک کلاس موجود، که به آن کلاس پایه (base) یا  اَبَرکلاس (superclasses) می‌گویند، یک زیرکلاس منشعب (derived) می‌شود، بعبارتی، کلاسِ منشعب شده کلیه کارکرد‌های کلاس پایه را به ارث می‌برد و به آنها دسترسی خواهد داشت. برای مثال کلاس پایهِ Exception چند عضو دارد که در میان همه کلاس‌های اعتراضِ منشعب شده، دارای پیاده‌سازی یکسانی هستند. برای مثال کلاس SqlException همه اعضای کلاس پایه Exception را دارد، ولی خودش نیز تعدادی عضو دارد که به اعتراضاتِ خاصِ پایگاه داده SQL مربوط است، چیزهایی مثل اتصال پایگاه داده.

·        انتزاع (Abstraction): درباره گرفتن ایده اصلی یک شیء و نادیده گرفتن جزئیات یا خصوصیات آن است. C# دارای کلیدواژه‌ای بنام abstract است که به این مفهوم شکل می‌دهد. اگر یک کلاس بطور صریح abstract اعلان نشده باشد، به آن غیرانتزاعی (concrete) گفته می‌شود. اغلب کلاس‌های پایه، یا اَبَرکلاس‌ها، انتزاعی هستند. مثلاً کلاس پایه Stream از نوع انتزاعی، و کلاس‌های منشعب از آن، مثل FileStream و MemoryStream غیرانتزاعی هستند. فقط از کلاس‌های غیرانتزاعی می‌توان برای ساخت اشیاء استفاده کرد؛ کلاس‌های انتزاعی فقط می‌توانند به عنوان کلاس پایه برای کلاس‌های دیگر بکار گرفته شوند، زیرا آنها فاقد برخی از پیاده‌سازی‌های لازم هستند. استفاده از کلاس‌های انتزاعی مستلزم دقت است. هر قدر شما یک کلاس را انتزاعی‌تر کنید، کلاس‌های بیشتری می‌توانند از آن ارث‌بری کنند، ولی در عین حال، برای کلاس‌های به ارث رسیده کارآیی مشترک کمتری وجود دارد.

·        چندریختی (Polymorphism): درباره این است که کلاس منشعب شده، متدهای کلاس پایه را باطل کرده و خودش آن را بازتعریف کند.

ساختن کتابخانه‌های کلاس

مجتمع‌های کتابخانهِ‌ کلاس (اسمبلی‌ها)، گونه‌های مختلف را در واحدهای قابل توزیع (که به شکل فایل‌های DLL هستند) گروه‌بندی می‌کنند. جدا از آزمایش‌های واحدی، تا اینجا شما فقط برنامه‌های کنسولی را ساخته‌اید. برای اینکه برنامه‌هایی که می‌نویسید در پروژه‌های متعدد قابل استفاده باشند، شما باید آنها را در مجتمع‌های کتابخانهِ کلاس قرار دهید، و این همان کاری است که مایکروسافت انجام می‌دهد.

ایجاد یک کتابخانهِ کلاس

اولین کاری که باید انجام ‌دهیم ایجاد یک کتابخانه کلاس .NET با قابلیتِ استفاده مجدد است:

1.    در فولدر Code فولدری بنام Chapter05 ایجاد کرده و سپس در آن زیرفولدری بنام PacktLibrary بسازید.

2.    در VSC به File | Save Workspace As… بروید، نام Chapter05 را وارد کرده، Chapter05 را انتخاب کنید، و روی Save کلیک کنید.

3.    به File | Add Folder to Workspace… بروید، PacktLibrary را انتخاب کرده، و روی ADD کلیک کنید.

4.    در ترمینال این دستور را وارد کنید: dotnet new classlib.

5.    فایل PacktLibrary.csproj را باز کنید. همانطور که می‌بینید، طبق پیش‌فرض هدف (target) کتابخانه کلاس .NET 5 است، بنابراین فقط با مجتمع‌هایی می‌تواند کار کند که با .NET 5 سازگار باشند.

Description: Description: <Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>

</Project>

6.    Framework هدف را طوری تغییر دهید که از استاندارد .NET 2.0 پشتیبانی کند.

Description: Description: <Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>

</Project>

7.    فایل را ذخیره کرده و آن را ببندید.

8.    در ترمینال با وارد کردن دستور dotnet build، پروژه را کمپایل کنید.

روش‌های خوب: برای اینکه در برنامه‌های خودتان از آخرین ویژگی‌های C# و سکوهای .NET استفاده کنید، هدف آن را .NET 5 تنظیم کنید. برای اینکه از سکوهای .NET موروثی، مثل .NET Code، .NET Framework، و Xamarin پشتیبانی کنید، هدف کتابخانه کلاس خودتان را .NET 2.0 قرار دهید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image003.png

تعریف یک کلاس

کار بعدی که باید انجام دهیم تعریف کلاسی است که نمایانگر یک شخص باشد:

1.    در EXPLORER نام فایل Class1.cs را به  Person.csتغییر دهید.

2.    روی Person.cs کلیک کنید تا باز شود و نام کلاس را به Person تغییر دهید.

3.    نام فضای‌اسمی را به Packt.Shared تغییر دهید.

روش‌های خوب: ما به این دلیل این اسم را انتخاب می‌کنیم چون مهم است کلاس‌ها در یک فضای‌اسمی قرار گیرند که از لحاظ منطقی نام‌گذاری مناسبی داشته باشند. بهتر است برای نامِ فضاهای اسمی از دامنه استفاده شود، مثل System.Numerics که برای گونه‌های عددی از آن استفاده می‌شود. ولی در برنامه فعلی ما، گونه‌ها و کلاس‌هایی که می‌سازیم عبارتند از Person، BankAccount، WondersOfTheWorld، و آنها دامنه مشخص و مشترکی با یکدیگر ندارند.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image003.png

فایل شما باید مانند زیر باشد:

Description: Description: using System;

namespace Packt.Shared
{
public class Person
{
}
}

 

توجه کنید که کلیدواژهpublic  پیش از کلیدواژه class آمده. به کلیدواژه‌هایی مثل public، مُعرفِ دسترسی (access modifier) می‌گویند، و آنها چگونگی دسترسی به کلاس تعریف شده را از داخل برنامه‌های دیگر مشخص می‌کند.

اگر شما پیش از class، بطور صریح public را ذکر نکنید، آنگاه این کلاس تنها از درون مجتمعی (assembly) که در آن تعریف شده قابل دسترس خواهد بود. دلیل آن هم این است که بطور پیش‌فرض مُعرفِ دسترسی یک کلاس internal است. ولی چون ما نیاز داریم این کلاس خارج از مجتمع خودش قابل دسترس باشد، باید صریحاً مُعرفِ دسترسی آن را public ذکر کنیم.

برای ادامه مطالعه این فصل، با مراجعه به این آدرس، نسخه PDF آن را تهیه فرمایید.

 

 


فصل 6

18/10/99

پیاده‌سازی رابط‌ها (اینترفیس‌ها) و وراثت

در این فصل شما یادخواهید گرفت که با OOP چگونه از گونه‌های موجود گونه‌های جدیدی را منشعب کنید. شما تعریف عملگرها، ایجاد توابع محلی برای انجام کارهای ساده، و تعریف نماینده‌ها و رویدادها برای تبادل پیام میان گونه‌ها را یاد خواهید گرفت. شما یادخواهید گرفت که چگونه برای عملکردهای معمول، رابط‌هایی (اینترفیس) را پیاده‌سازی کنید. شما گونه‌های عمومی یا عام (یا جنریک) و تفاوت میان گونه‌های مقداری و ارجاعی را یاد خواهید گرفت. شما یادخواهید گرفت که چگونه از یک کلاس پایه ارث‌بری کنید، و چگونه از چندشکلی استفاده کنید. نهایتا شما یاد خواهید گرفت که چگونه متدهای توسعه ایجاد کنید، و چگونه در یک سلسه‌مراتب ارث‌بری، کلاس‌ها را به یکدیگر تبدیل کنید.

این فصل موضوعات زیر را پوشش می‌دهد:

·        تشکیل یک کتابخانه کلاس و برنامه کنسولی.

·        ساده کردن متدها.

·        تولید رویدادها و رسیدگی به آنها.

·        پیاده‌سازی رابط‌ها (اینترفیس‌ها).

·        تولید گونه‌هایی که قابلیت استفاده مجدد بیشتری داشته باشند با استفاده از گونه‌های عام.

·        مدیریت حافظه با استفاده از گونه‌های ارجاعی و مقداری.

·        ارث بری از کلاس‌ها.

·        تبدیل گونه در درون سلسله‌مراتب وراثت.

·        ارث‌بری و گسترش گونه‌های .NET

تشکیل یک کتابخانه کلاس و برنامه کنسولی

شبیه آنچه در فصل 5 انجام دادیم، ما کار خودمان را با تعریف یک فضای‌کاری شروع می‌کنیم که شامل دو پروژه است. اگر شما همه تمرین‌های آن فصل را تکمیل کرده باشید، در اینصورت می‌توانید فضای‌کاری Chapter05 را باز کرده و کار با پروژه‌های آن را ادامه دهید.

در غیر این صورت، دستورات زیر را دنبال کنید:

1.    در فولدر موجود Code، فولدری بنام Chapter06 با دو زیرفولدر ایجاد کنید، یکی بنام PacktLibrary و دیگر بنام PeopleApp.

·          Chapter06

·         PacktLibrary

·         PeopleApp

2.    برنامه VSC را اجراء کنید.

3.    به File | Save As Workspace… بروید و نام Chapter06 را وارد کرده و روی Save کلیک کنید.

4.    به File | Add Folder to Workspace… بروید، فولدر PacktLibrary را انتخاب کرده و روی Add کلیک کنید.

5.    به File | Add Folder to Workspace… بروید، فولدر PeopleApp  را انتخاب کرده و روی Add کلیک کنید.

6.    به Terminal | New Terminal بروید و  PacktLibraryرا انتخاب کنید.

7.    در ترمینال دستور زیر را وارد کنید:

Description: Description: dotnet new classlib

8.    به Terminal | New Terminal بروید و PeopleApp را انتخاب کنید.

9.    در ترمینال دستور زیر را وارد کنید:

Description: Description: dotnet new console

10. در EXPLORER در PacktLibrary، نام فایل Class1.cs را به Person.cs تغییر دهید.

11. محتوای فایل را بصورت زیر تغییر دهید:

Description: Description: using System;

namespace Packt.Shared
{
public class Person
{
}
}

12. در EXPLORER  فولدری بنام PeopleApp را گسترش دهید و روی فایل PeopleApp.csproj کلیک کنید.

13. یک ارجاع پروژه به PacktLibrary را اضافه کنید:

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image048.png

14. برای فولدر PeopleApp ، در پنجره ترمینال دستور dotnet build را وارد کنید.

15. به کلاس Person عباراتی را اضافه کنید تا سه فیلد و یک متد را تعریف کنید:

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image049.png

ساده کردن متدها

ممکن است ما بخواهیم دو نمونه از Person بتوانند تولیدِ مثل کنند. ما می‌توانیم اینکار را با استفاده از متدها انجام دهیم. متدهایِ نمونه‌ای (Instance methods) کارهایی هستند که یک شیء روی خودش انجام می‌دهد؛ متدهایِ ایستا کارهایی هستند که کلاس انجام می‌دهد.

اینکه شما از کدامیک از اینها استفاده کنید، بیشتر به کار مورد نظر بستگی دارد.

روش‌های خوب: داشتن هر دو متد ایستا و نمونه‌ای برای انجام کارهای مشابه نیز معمول است. برای مثال، کلاس string برای مقایسه رشته‌ها، هم دارای یک متد ایستا بنام Compare و هم یک متد نمونه‌ای بنام CompareTo است. انتخاب میان این دو به نظر برنامه‌نویس بستگی دارد، تا انعطاف بیشتری به آنها بدهد.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image003.png

انجام کارها با استفاده از متدها

بیایید کارمان را با انجام چند کار توسط متدها شروع کنیم:

1.    به کلاس Person یک متد نمونه‌ای و یک متد ایستا اضافه کنید، تا به به دو شیء از گونه Person اجازه دهد تولیدِ مثل کند:

Description: Description: // static method to "multiply"
public static Person Procreate(Person p1, Person p2)
{
var baby = new Person
{
Name = $"Baby of {p1.Name} and {p2.Name}"
};

p1.Children.Add(baby); p2.Children.Add(baby);

return baby;
}

// instance method to "multiply"
public Person ProcreateWith(Person partner)
{
return Procreate(this, partner);
}

برای ادامه مطالعه این فصل، با مراجعه به این آدرس، نسخه PDF آن را تهیه فرمایید.

 


فصل 7

28/10/99

بسته‌ها و گونه‌های .NET

این فصل درباره رابطه میان فضاهای اسمی و مجتمع‌ها (اسمبلی‌ها)، و همچنین آن دسته از کلیدواژه‌های C# است که به گونه‌های .NET مربوط‌ هستند. شما همچنین یادخواهید گرفت که چگونه برنامه‌ها و کتابخانه‌هایی که می‌سازید را بسته‌بندی و منتشر کنید تا آنها در سکوهای متعدد قابل استفاده باشند. با چگونگی استفاده از برنامه‌های و کتابخانه‌های قدیمی که برپایه .NET Framework موروثی ساخته شده‌اند و امکان انتقال آنها به .NET جدید نیز آشنا می‌شوید.

در این فصل موضوعات زیر پوشش داده خواهد شد:

·        مقدمه‌ای بر .NET 5

·        کمپوننت‌های .NET

·        انتشار برنامه‌های شما برای استقرار (deployment) بر روی کامپیوترهای کاربران

·        از کامپایل در آوردن (Decompiling) مجتمع‌ها (اسمبلی‌ها)

·        بسته‌بندی کتابخانه‌های شما برای توزیع NuGet

·        انتقال برنامه‌ها از .NET Framework به .NET 5

مقدمه‌ای بر .NET 5

این بخش از کتاب به کارکرد APIهایی که کتابخانه کلاس پایه یا BCL[11] در .NET 5 فراهم آورده، و چگونگی استفاده مجدد از برنامه‌ها در تمام سکوهای مختلف با استفاده از استاندارد .NET مربوط است.

.NET Core 2.0 و بالاتر، از حداقل استانداردهایی که .NET Standard 2.0 لازم دارد پشتیبانی می‌کند. این مهم است، زیرا این نسخه بسیاری از APIهایی را فراهم آورده که در .NET Core غایب بودند. کتابخانه‌های و برنامه‌های با ارزشی که حاصل 15 سال کار برنامه‌نویسان .NET Framework بود، حالا برای انتقال به .NET آماده شده‌اند و می‌توان آنها را علاوه بر ویندوز، در سیستم‌عامل‌های مختلفی مثل مک‌او‌اس و لینوکس نیز بکار گرفت.

.NET Standard 2.1 بیش از سه هزار API جدید اضافه کرد. برخی از آن APIها به تغییرات اساسی نیاز داشت که موجب ازبین رفتن سازگاری می‌شد، بنابراین آخرین نسخه .NET Framework که نسخه 4.8 است، تنها .NET Standard 2.0 را پیاده‌سازی کرد، و نه نسخه 2.1 را. .NET Core 3.0 ، Xamarin، Mono، و Unity نسخه .NET Standard 2.1 را پیاده‌سازی کردند.

 اطلاعات بیشتر: لیست کامل APIهای .NET Standard 2.1 و مقایسه آنها با .NET Standard 2.0 در این صفحه مستند شده است.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

اگر همه پروژه‌های شما بتوانند از .NET 5 استفاده کند، نیاز به .NET Standard ندارند. بدلیل اینکه ممکن است شما برای پروژه‌های موروثی .NET Framework، یا برای برنامه‌های موبایل Xamarin، هنوز نیاز داشته باشید کتابخانه‌های کلاس ایجاد کنید، هنوز نیاز است که کتابخانه‌های کلاس .NET Standard 2.0 و 2.1 ایجاد شوند. هنگامی که .NET 6 در نوامبر سال 2021 بیرون بی‌آید، آنگاه نیاز به .NET Standard باز هم کمتر می‌شود.

 اطلاعات بیشتر: برای اطلاع از آینده .NET Standard  به این آدرس رجوع کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

برای اینکه پیشرفت .NET را در پنج سال گذشته خلاصه کنم، من نسخه‌های عمده .NET Core و نسخه‌های جدید .NET را با نسخه‌های قدیمی .NET Framework مقایسه کرده‌ام.

·        .NET Core 1.0: در مقایسه با.NET Framework 4.6.1، که نسخه جاری چهارچوب نت در سال 2016 بود، دارای APIهای کمتری بود.

·        .NET Core 2.0: از لحاظ تعداد APIها با .NET Framework 4.7.1 برابری می‌کرد، زیرا هر دو آنها .NET Standard 2.0 را پیاده‌سازی کرده بودند.

·        .NET Core 3.0: در مقایسه با NET Framework 4.8. دارای APIهای بیشتری بود، زیرا آخرین نسخه چهارچوب نت (یعنی نسخه 4.8) .NET Standard 2.1 را پیاده‌سازی نکرده.

·        .NET 5: در مقایسه با NET Framework 4.8. حتی APIهای بیشتری دارد، که کارآیی و سرعت آنها نیز بهبود یافته.

 اطلاعات بیشتر: برای جستجو و مشاهده کلیه APIهای .NET، شما می‌توانید به این آدرس مراجعه کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

 

.NET Core 1.0

.NET Core 1.0 در ماه ژوئن سال 2016 بیرون آمد و تمرکز آن برروی APIهایی بود که برای ساختن برنامه‌های چند-سکویی مناسب بود، از جمله برنامه‌های وب و کلاد، و سرویس‌های برای لینوکس با استفاده از ASP.NET Core.

 اطلاعات بیشتر: شما برای اطلاعات بیشتر درمورد اعلان .NET Core 1.0 توسط مایکروسافت، می‌توانید به این آدرس رجوع کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

.NET Core 1.1

.NET Core 1.1 در نوامبر سال 2016 بیرون آمد و تمرکز آن برروی رفع اشکلات قبلی، افزایش تعداد نسخه‌های لینوکس پشتیبانی شده، پشتیبانی از .NET Standard 1.6 ای لینوکس پشتیبانی شده، پشتیبانی از  آن برروی وژهازگاری مییک متد از باطل شدناطل، یا گسترش دهید.افظه مدیریت شده شیء را بجای دو م، و بهبود سرعت، خصوصاً در ASP.NET Core، برای برنامه‌ها و سرویس‌های وب بود.

 اطلاعات بیشتر: شما برای اطلاعات بیشتر درمورد اعلان .NET Core 1.1 توسط مایکروسافت، می‌توانید به این آدرس رجوع کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

.NET Core 2.0

.NET Core 2.0 در ماه آگوست سال 2017 بیرون آمد و تمرکز آن بر روی پیاده‌سازی .NET Standard 2.0، رجوع به کتابخانه‌های .NET Framework، و بهبود سرعت بیشتر بود.

 اطلاعات بیشتر: شما برای اطلاعات بیشتر درمورد اعلان .NET Core 2.0 توسط مایکروسافت، می‌توانید به این آدرس رجوع کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

ویرایش سوم این کتاب در ماه نوامبر سال 2017 منتشر شد، بنابراین .NET Core 2.0 و .NET Core برای برنامه‌های UWP[12] را پوشش می‌داد.

.NET Core 2.1

.NET Core 2.1 در ماه می سال 2018 بیرون آمد و تمرکز آن بر روی سیستم ابزاری قابل گسترش، اضافه کردن گونه‌های جدیدی مثل Span<T>، APIهای جدید برای رمزنگاری و فشرده‌سازی، یک بسته سازگاری ویندوز با بیش از 20000 API برای کمک به انتقال برنامه‌های قدیمی ویندوز، تبدیل مقادیر Entity Framework Core، تبدیل‌های LINQ GroupBy، کاشتن داده‌ها (data seeding پرس‌ و جوی گونه‌ها، و افزایش کارآیی‌ بیشتر، و همچنین موضوعات زیر:

ویژگی

فصل

موضوع

Spans, indexes, ranges

8

کار با محدوده‌ها، ایندکس‌ها، و بردها

Brotli compression

9

فشرده‌سازی با الگوریتم بروتلی

Cryptography

10

موارد جدید در رمزنگاری

Lazy loading

11

فعال کردن بارگذاری غیر-همزمان

Data seeding

11

کاشت داده‌ها

.NET Core 2.2

.NET Core 2.2 در ماه دسامبر سال 2018 بیرون آمد و تمرکز آن بر روی بهبودهای تشخیصی برای حین‌اجراء، کامپایل کردن ردیفی اختیاری (tiered compilation)، و اضافه کردن خصوصیات جدید به ASP.NET Core و Entity Framework Core، مانند پشتیبانی از داده‌های مکانی با استفاده از کتابخانه NetTopologySuite، تگ‌های پرس‌ و جو، و گردایه‌های نهادهای صاحب شده.

 اطلاعات بیشتر: شما برای اطلاعات بیشتر درمورد اعلان .NET Core 2.2 توسط مایکروسافت، می‌توانید به این آدرس رجوع کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

.NET Core 3.0

.NET Core 3.0 در سپتامبر سال 2019 بیرون آمد و تمرکز آن بر روی ساختن برنامه‌های دسک‌تاپ ویندوزی با استفاده از Windows Form، Windows Presentation، و Entity Framework 6.3، یک JSON خوان سریع، دسترسی به پورت سریال، و دیگر دسترسی‌های PIN برای اینترنت اشیاء (IoT)، و همچنین موضوعاتی که در جدول زیر ذکر شده، بود.

ویژگی

فصل

توضیح

برنامه‌های حاوی .NET

7

انتشار برنامه‌ها برای نصب روی کامپیوتر کاربر

ایندکس‌ها و بردها

8

کار با محدوده‌ها، ایندکس‌ها، و بردها

System.Text.Json

9

پردازش‌ها سریع JSON

جریان‌های ناهنگام

13

کار با جریان‌های ناهنگام

ویرایش چهارم این کتاب در اکتبر سال 2019 منتشر شد، بنابراین مطالب فوق در آن پوشش داده شده بود.

 اطلاعات بیشتر: شما برای اطلاعات بیشتر درمورد اعلان .NET Core 3.0 توسط مایکروسافت، می‌توانید به این آدرس رجوع کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

.NET 5.0

.NET 5.0 در نوامبر سال 2020 منتشر شد و تمرکز آن بر روی متحد کردن سکوهای مختلف .NET، تصفیه کردن سکو، و بهبود کارآیی و سرعت، و از جمله موضوعات زیر بود:

 

ویژگی

فصل

توضیح

گونه‌های نیمه (Half type)

8

کار با اعداد جدید

بهبود سرعت عبارات باقاعده

8

سرعت عبارات باقاعده بهبود یافته

بهبودها در System.Text.Json

9

پردازش‌ها سریع JSON

Filtered Include

11

فیلتر کردن نهادهای شامل شده

Scaffold-DbContext

 

11

مدل‌های داربستی با استفاده از یک پایگاه داده موجود

 

اطلاعات بیشتر: شما برای اطلاعات بیشتر درمورد اعلان .NET 5.0 توسط مایکروسافت، می‌توانید به این آدرس رجوع کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

بهبود سرعت از .NET Core 2.0 تا .NET 5

در طی چند سال گذشته مایکروسافت سرعت .NET را خیلی بهبود داده.

اطلاعات بیشتر:  برای اطلاع از این موضوع می‌توانید به این وب‌لاگ رجوع کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

برای ادامه مطالعه این فصل، با مراجعه به این آدرس، نسخه PDF آن را تهیه فرمایید.

 

 


فصل 8

06/11/99

 

گونه‌های متداول در .NET

این فصل درباره برخی از گونه‌های معمول در .NET است. اینها شامل گونه‌هایی برای کار با اعداد، متن‌ها، گردایه‌ها، دسترسی به شبکه، انعکاس، و صفت‌ها هستند. همچنین کار با محدوده‌ها، ایندکس‌ها، بردها، و بین‌المللی‌سازی را توضیح خواهیم داد.

این فصل موضوعات زیر را پوشش می‌دهد:

·        کار با اعداد

·        کار با متن‌ها

·        تطبیق الگو با عبارات باقاعده

·        ذخیره چند شیء در گردایه‌ها

·        کار با محدوده‌ها، ایندکس‌ها، و بردها

·        کار با منابع شبکه

·        کار با صفت‌ها

·        کار با تصاویر

·        بین‌المللی‌سازی برنامه‌ها

کار با اعداد

اعداد یکی از متداول‌ترین گونه‌ها هستند. متداول‌ترین گونه‌های .NET برای کار با اعداد اینها هستند:


 

فضای‌اسمی

نمونه (گونه‌ها)

توضیح

System

SByte, Int16, Int32, Int64

اعداد صحیح: یعنی صفر و اعداد صحیح مثبت و منفی.

System

Byte, UInt16, UInt32, UInt64

اعداد شمارشی : یعنی صفر و اعداد صحیح مثبت

System

Half, Single, Double

اعداد حقیقی: یعنی اعداد اعشاری (ممیز شناور).

System

Decimal

اعداد حقیقی دقیق: یعنی اعدادی که می‌توان از آنها در کارهای علمی، مهندسی، و مالی استفاده کرد.

System

.Numerics

BigInteger, Complex, Quaternion

اعداد صحیح بزرگ، اعداد مختلط، و کواترنیون‌ها (چهارگان‌ها).

 

 اطلاعات بیشتر: برای کسب اطلاعات بیشتر درباره این موضوع، شما می‌توانید به این آدرس رجوع کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

از زمان که .NET Framework 1.0 بیرون آمد، .NET دارای دو گونه اعشاری float 32-بیتی و double 64-بیتی است. استاندارد IEEE 754 نیز یک عدد ممیز شناور 16-بیتی را تعریف کرده. در برخی از الگوریتم‌ها، از جمله الگوریتم‌های یادگیری ماشینی (Machine learning)، از این نوع اعدادِ دقتِ-پایین، که به اعداد نِصفه (Half number) معروفند، استفاده می‌کنند. بنابراین مایکروسافت گونه System.Half را به .NET 5 اضافه کرد.

فعلاً زبان C# نام مستعار half را برای اعداد مذکور تعریف نکرده، بنابراین در صورت نیاز باید از نام کامل آنها، یعنی System.Half ، استفاده شود. البته ممکن است در آینده یک نام مستعار برای آنها تعریف شود.

 

 اطلاعات بیشتر: برای اطلاعات بیشتر درمورد اعداد نصفه به این آدرس رجوع کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

کار با اعداد صحیح بزرگ

بزرگترین عدد صحیحی که می‌تواند در یک گونه .NET ذخیره شود، و در زبان C# دارای یک نام مستعار است، حدود 18 میلیارد میلیارد است، که در یک گونه unsigned long  ذخیره می‌شود. ولی اگر بخواهید از اعداد بزرگتری استفاده کنید تکلیف چیست؟ بیایید با هم اعداد را بیشتر بررسی کنیم.:

2.    در فولدری بنام Chapter08، یک برنامه کنسولی جدید به نام WorkingWithNumbers را ایجاد کنید.

3.    فضای کاری را بعنوان Chapter08 ذخیره کرده و WorkingWithNumbers را به آن اضافه کنید.

4.    در فایل Program.cs عبارتی را اضافه کنید کردن فضای‌اسمی System.Numerics را وارد کند:

Description: Description: using System.Numerics;

5.    در متد Main، عباراتی را وارد کنید تا بزرگترین مقدار گونه ulong، و همچنین یک عدد صحیح بزرگ 30 رقمی را نشان دهد:

Description: Description: var largest = ulong.MaxValue;
WriteLine($"{largest,40:N0}");

var atomsInTheUniverse = BigInteger.Parse("123456789012345678901234567890");
WriteLine($"{atomsInTheUniverse,40:N0}");

عدد 40 که در کد فرمت آمده به معنی این است که به اندازه 40 حرف از سمت راست تراز شود، بنابراین هر دو عدد چاپ شده از سمت راست با هم در یک تراز قرار می‌گیرند. N0 یعنی از جداکننده‌های سه‌تایی و بدون اعشاری استفاده شود.

6.    برنامه را اجراء کرده و نتیجه را مشاهده کنید:

Description: Description: 18,446,744,073,709,551,615
123,456,789,012,345,678,901,234,567,890

کار با اعداد مختلط

یک عدد مختلط می‌تواند بصورت a + bi بیان شود، که a و b اعداد حقیقی هستند، و i یکای موهومی است، که در معادله i2=-1 صدق می‌کند. اگر قسمت حقیقی a صفر باشد، این عدد یک عدد موهومی خالص است، و اگر قسمت موهومی b صفر باشد، این یک عدد حقیقی است.

اعداد مختلط در بسیاری از حوزه‌ها، از جمله در علوم، تکنولوژی، مهندسی، و ریاضیات کاربرد دارند. بعلاوه جمع آنها بصورت جمع جداگانه اجزاء حقیقی و موهومی انجام می‌شود:

Description: Description: (a + bi) + (c + di) = (a + c) + (b + d)i

بیایید اعداد مختلط را بیشتر بررسی کنیم:

1.    در متد Main عباراتی را وارد کنید که دو عدد مختلط را با هم جمع کند:

Description: Description: var c1 = new Complex(4, 2);
var c2 = new Complex(3, 7);
var c3 = c1 + c2;
WriteLine($"{c1} added to {c2} is {c3}");

2.    برنامه کنسولی را اجراء کرده و نتیجه را مشاهده کنید:

Description: Description: (4, 2) added to (3, 7) is (7, 9)

اعداد چهارگان یا کواترنیون‌ها (Quaternions) یک دستگاه عددی هستند که اعداد مختلط را گسترش می‌دهند. آنها یک جبر شرکت‌پذیری تقسیمِ نُرم‌دار چهار-بعدی را بر روی اعداد حقیقی تشکیل میدهند.

اوف! باور کنید خود من هم از تعریف بالا چیز زیادی نمی‌فهمم. بنابراین نگران نباشید، ما برنامه‌ای برای استفاده از آنها نخواهیم داشت. تنها چیزی که لازم است بگویم این است که آنها در توصیف چرخش‌های فضایی خوب عمل می‌کنند، بنابراین در هسته اصلی بازی‌ها، و بسیاری دیگر از شبیه‌سازهای پرواز و سیستم‌های کنترلی، از آنها استفاده می‌شود.

برای ادامه مطالعه این فصل، با مراجعه به این آدرس، نسخه PDF آن را تهیه فرمایید.

 

 


فصل 9

13/11/99

 

فایل‌ها، جریان‌ها و سریال‌سازی

این فصل درباره خواندن و نوشتن فایل‌ها و جریان‌ها، به رمز درآوردن متن‌ها،  و سریال‌سازی است. ما در بخش‌های بعدی موضوعات زیر را پوشش می‌دهیم:

·        سیستم‌فایلی (Filesystem).

·        خواندن و نوشتن با جریان‌ها (streams).

·        به رمز درآوردن (Encoding) و از رمزدر آوردن (Decoding) متن‌ها.

·        سریال‌سازی (Serializing) اشیاء.

سیستم‌فایلی

اغلب برنامه‌های شما نیاز دارند تا عملیات ورودی و خروجی را بر روی فایل‌ها و دایرکتوری‌ها انجام دهند. فضاهای اسمی System و System.IO حاوی کلاس‌هایی برای این منظور هستند.

رسیدگی چند-سکویی به سیستم‌های‌فایلی و محیط‌ها

بیایید ببینیم در محیط‌های مختلف مثل ویندوز، لینوکس، و مک‌او‌اس چگونه می‌توانیم از سیستم‌فایلی استفاده کنیم:

1.    در فولدر جدیدی بنام Chapter09، یک پروژه کنسولی جدید بنام WorkingWithFileSystems  ایجاد کنید.

2.    فضای کاری را بعنوان Chapter09 ذخیره کرده و WorkingWithFileSystems   را به آن اضافه کنید.

3.    فضای‌اسمی System.IO را وارد کرده، و همچنین گونه‌های System.Console، System.IO.Directory، System.Environment،  و  System.IO.Path را بصورت ایستا وارد کنید:

Description: Description: using System.IO; // types for managing the filesystem
using static System.Console;
using static System.IO.Directory;
using static System.IO.Path;
using static System.Environment;

در سیستم‌های ویندوز، لینوکس، و مک‌او‌اس، مسیرها با یکدیگر متفاوتند، بنابراین ما کارمان را با این شروع می‌کنیم که .NET چگونه به این رسیدگی می‌کند.

4.    یک متد ایستا بنام OutputFileSystemInfo ایجاد کنید، و عباراتی را در آن وارد کنید تا موارد زیر را انجام دهد:

· حرف جداکننده مسیر و دایرکتوری را چاپ کند.

· مسیر دایرکتوری جاری را چاپ کند.

·        برخی از مسیرهای خاص، مانند مسیر فایل‌های سیستم، فایل‌های موقتی (temporary files)، و مستندات (documents) را چاپ کند.

Description: Description: static void OutputFileSystemInfo()
{
  WriteLine("{0,-33} {1}", "Path.PathSeparator", PathSeparator);
WriteLine("{0,-33} {1}", "Path.DirectorySeparatorChar", DirectorySeparatorChar);
WriteLine("{0,-33} {1}", "Directory.GetCurrentDirectory()", GetCurrentDirectory());
WriteLine("{0,-33} {1}", "Environment.CurrentDirectory", CurrentDirectory);
WriteLine("{0,-33} {1}", "Environment.SystemDirectory", SystemDirectory);
WriteLine("{0,-33} {1}", "Path.GetTempPath()", GetTempPath()); WriteLine("GetFolderPath(SpecialFolder");
WriteLine("{0,-33} {1}", " .System)", GetFolderPath(SpecialFolder.System));
WriteLine("{0,-33} {1}", " .ApplicationData)", GetFolderPath(SpecialFolder.ApplicationData));
WriteLine("{0,-33} {1}", " .MyDocuments)", GetFolderPath(SpecialFolder.MyDocuments));
WriteLine("{0,-33} {1}", " .Personal)", GetFolderPath(SpecialFolder.Personal));
}

گونه Environment خیلی از اعضای مفید دیگر نیز دارد، از جمله متدِ GetEnvironmentVariables و ویژگی‌های  OSVersion  و ProcessorCount.

5.    در متد Main، متد OutputFileSystemInfo را فراخوانی کنید:

Description: Description: static void Main(string[] args)
{
OutputFileSystemInfo();
}

6.    برنامه کنسولی را اجراء کرده و نتایج آن را مشاهده کنید:

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image060.png

شکل 9.1: اطلاعات مربوط به سیستم‌فایلی، پس از اجراء برنامه.

در ویندوز از حرف بک‌اسلش (\) برای جداسازی دایرکتوری‌ها استفاده می‌شود. ولی در مک‌اواس و لینوکس از اسلش استفاده می‌شود (/).

کار با درایوها

برای کار با درایوها (drives)، از کلاس DriveInfo استفاده کنید، این کلاس دارای یک متد ایستا است که اطلاعاتی درباره کلیه درایوهایی که به کامپیوتر شما متصل هستند را باز می‌گرداند. هر درایو دارای یک ’گونهِ درایو‘ است. برای این منظور مراحل زیر را دنبال کنید:

1.    متدی بنام WorkWithDrives ایجاد کرده و عباراتی را در آن بنویسید که کلیه درایوهای کامپیوتر را گرفته و نام، نوع، اندازه، فضای خالی، و فرمت آنها را نشان دهد، ولی فقط در صورتی این اطلاعات را نشان دهد که درایو در حالت آماده بکار (ready) باشد:

                                      Description: Description: static void WorkWithDrives()
{
WriteLine("{0,-30} | {1,-10} | {2,-7} | {3,18} | {4,18}",
"NAME", "TYPE", "FORMAT", "SIZE (BYTES)", "FREE SPACE");

foreach (DriveInfo drive in DriveInfo.GetDrives())
{
if (drive.IsReady)
{
WriteLine(
"{0,-30} | {1,-10} | {2,-7} | {3,18:N0} | {4,18:N0}",
drive.Name, drive.DriveType, drive.DriveFormat, drive.TotalSize, drive.AvailableFreeSpace);
}
else
{
WriteLine("{0,-30} | {1,-10}", drive.Name, drive.DriveType);
}
}
}

برای ادامه مطالعه این فصل، با مراجعه به این آدرس، نسخه PDF آن را تهیه فرمایید.

 


فصل 10

19/11/99

 

محافظت از داده‌ها و برنامه‌ها

 

این فصل درباره بکارگیری رمزگذاری (encryption) برای محافظت از داده‌ها است تا از مشاهده آنها توسط کاربرانی که سوء نیت دارند جلوگیری کند. ما همچنین استفاده از درهم‌سازی (hashing) و امضاء (signing) را برای جلوگیری از تغییر داده‌ها توضیح خواهیم داد.

مایکروسافت در .NET Core 2.1، API رمزگزاری بر پایه Span<T> را معرفی کرد، تا از آن برای درهم‌سازی، تولید اعداد تصادفی، تولید و پردازش ناهمزمانِ امضاء استفاده شود.

عملیات رمزنگاری توسط توابعی انجام می‌شوند که در سیستم‌عامل پیاده‌سازی شده‌اند، بنابراین وقتی یک آسیب‌پذیری در سطح سیستم‌عامل اصلاح می‌شود، برنامه‌های .NET فوراً از آن بهره می‌برند. ولی این یعنی فقط آن دسته از برنامه‌های .NET می‌توانند از ویژگی‌هایی استفاده کنند که سیستم‌عامل از آنها پشتیبانی کند.

 اطلاعات بیشتر: برای اطلاع از اینکه هر یک از سیستم‌عامل‌ها از چه ویژگی‌های رمزنگاری  پشتیبانی می‌کنند  به این آدرس رجوع کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

در این فصل موضوعات زیر پوشش داده می‌شود:

·        فرهنگِ اصطلاحاتِ حفاظت از داده‌ها.

·        رمزگذاری و از رمز درآوردن داده‌ها.

·        درهم سازی داده‌ها.

·        امضاء کردن داده‌ها.

·        تولید اعداد تصادفی.

·        ویژگی‌ها جدید مربوط به رمزنگاری در .NET

·        اعتبارسنجی و مجوز سنجی کاربران.

فرهنگِ اصطلاحاتِ حفاظت از داده‌ها

تکنیک‌های زیادی برای محافظت از داده‌ها وجود دارند، که در زیر توضیحات مختصری درمورد شش تا از پرطرفدارترین آنها آمده، و ما آنها را با جزئیات بیشتری در بخش‌های بعدی این فصل مرور خواهیم کرد:

·        به رمزدرآوردن (Encryption) و از رمزدرآوردن (Decryption): یک روند دو-طرفه برای تبدیل داده‌های شما وجود دارد، که در یکی از آنها متن‌های عادی به رمز در می‌آیند، و در دیگری متن‌های رمزی از رمز درمی‌آیند و به متون عادی تبدیل می‌شوند.

·        درهم‌سازی‌ها (Hashes): این یک روند یک-طرفه برای تولید یک مقدار درهم (hash value) است تا از آن برای ذخیره امنِ گذرواژه‌ها (passwords) استفاده شود، یا خرابی (corruption) و تغییرات بدخواهانه در داده‌ها را پیدا کرد.

·        امضا‌های دیجیتال (Signatures): از این تکنیک هنگامی استفاده می‌شود که بخواهیم اطمینان یابیم که داده‌ها از طرف کسی می‌آیند که هویت آن توسط یک امضاء (دیجیتالِ) معتبر تایید شده باشد.

·         اعتبارسنجی (Authentication): از این تکنیک هنگامی استفاده می‌شود که بخواهیم هویت (identify) یک نفر را با بررسی اعتبارات (credentials) او تعیین کنیم.

·        مجوز سنجی (Authorization): از این تکنیک هنگامی استفاده می‌شود که بخواهیم مطمئن شویم آیا کاربر مجوزهای (permission) لازم برای انجام یک عمل، یا کار با یک داده بخصوصی را دارد یا نه. اینکار با بررسی این صورت می‌گیرد که کاربر به چه گروه‌هایی تعلق دارد و آنها چه وظایفی (roles) دارند.

روش‌های خوب: اگر امنیت برای شما اهمیت دارد (که باید همینطور هم باشد!) بجای اینکه به توصیه‌هایی که روی سایت‌های اینترنتی مطرح می‌شوند اتکا کنید، برای مشاوره یک متخصص امنیتی را استخدام کنید. خیلی ساده می‌توان یک اشتباه کوچک را مرتکب شد، و در اینصورت برنامه‌ها و داده‌های شما آسیب‌پذیر خواهند شد، و شما وقتی متوجه آن می‌شوید که دیگر خیلی دیر شده!

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image003.png

کلیدها و اندازه کلید

الگوریتم‌های محافظت کننده غالباً از یک کلید (key) استفاده می‌کنند. کلیدها بصورت آرایه‌های بایتی با اندازه‌های متفاوت نشان داده می‌شوند.

روش‌های خوب: برای داشتن حفاظت بهتر، از کلیدی استفاده کنید که اندازه آن بزرگتر است.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image003.png

کلیدها می‌توانند متقارن (symmetric) یا  نامتقارن (asymmetric) باشند. در کلیدهای متقارن، برای رمزگذاری و از رمزدرآوردن از یک کلید استفاده می‌شود. در کلیدهای نامتقارن برای رمزگذاری از یک کلید (که کلید عمومی نامیده می‌شود)، و برای از رمزدرآوردن از کلید دیگری (که کلید خصوصی نامیده می‌شود) استفاده می‌شود.

روش‌های خوب: الگوریتم‌های رمزنگاری کلید-متقارن سریع هستند و توسط یک جریان می‌توانند حجم زیادی از داده‌ها را به رمز درآورند. الگوریتم‌های کلید-نامتقارن کُند هستند و تنها می‌توانند آرایه‌های بایتی کوچکی را به رمز درآورند.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image003.png

اگر می‌خواهید مزیت‌های هر دو روش متقارن و نامتقارن را یکجا با هم داشته باشید، ابتدا داده‌های اصلی خودتان را توسط یک کلید متقارن به رمز درآورید، و سپس برای اشتراک آن کلیدِ متقارن، از یک کلید نامتقارن استفاده کنید. لایه سوکت امن (SSL)[13] در اینترنت به همین روش کار می‌کند.

کلیدها به شکل آرایه‌های بایتی هستند که اندازه‌های متفاوتی دارند.

بردارهای اولیه و اندازه بلوک‌

هنگامی که حجم زیادی از داده‌ها به رمز درآورده می‌شوند، احتمال دارد در آنها دنباله‌های تکراری وجود داشته باشد. برای مثال، در یک سند به زبان انگلیسی، لغت the مکرراً تکرار می‌شود، و هربار که به رمز درآورده شود، ممکن است مثلاً به شکل hQ2 ظاهر شود. همانطور که در زیر نشان داده شده، یک هکر خوب می‌تواند برای پیدا کردن کلید رمزگذاری از این مورد استفاده کند:

Description: Description: When the wind blew hard the umbrella broke.
5:s4&hQ2aj#D f9d1d£8fh"&hQ2s0)an DF8SFd#][1

ما می‌توانیم با تقسیم داده‌ها به بلوک‌ها (blocks) از ظهور دنباله‌های تکراری جلوگیری کنیم. بعد از رمز گذاری یک بلوک، بر اساس آن بلوک یک آرایه بایتی تولید می‌شود، و به بلوک بعدی خورانده می‌شود تا الگوریتم را طوری تغییر دهد که بلوک بعدی به شکل قبلی به رمز درنیاید. برای از رمز درآوردن اولین بلوک، ما باید به آن یک آرایه بایتی بخورانیم. این آرایه بردار اولیه (Initialization Vector یا IV) نامیده می‌شود.

روش‌های خوب: برای رمزگذاری بهتر از بلوک‌هایی با اندازه کوچک استفاده کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image003.png

چاشنی‌ها (Salts)

یک چاشنی (Salts) یک آرایه بایتیِ تصادفی است که از آن بعنوان یک ورودی اضافی در یک تابع درهم یک-طرفه استفاده می‌شود. اگر هنگام تولید درهم از یک چاشنی استفاده نکنید، در اینصورت اگر کاربران شما 123456 را بعنوان گذرواژه خودشان انتخاب کنند (بله، هنوز هم 8% کاربران در سال 2016 اینکار را می‌کنند)، آنگاه مقدار درهم آنها یکسان خواهد بود، و حساب کاربری آنها دربرابر یک حمله دیکشنری (Dictionary Attack) آسیب‌پذیر خواهد بود.

 اطلاعات بیشتر: شما با مراجعه به این آدرس می‌توانید اطلاعات بیشتری را درباره حملات دیکشنری 101 کسب کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

برای ادامه مطالعه این فصل، با مراجعه به این آدرس، نسخه PDF آن را تهیه فرمایید.

 


فصل 11

28/11/99

 

کار با پایگاه‌های‌داده توسط Entity Framework Core

این فصل درباره خواندن و نوشتن پایگاه‌های داده، نظیر Microsoft SQL Server، SQLite، و Azure Cosmos DB است. اینکارها توسط یک تکنولوژی نگاشتِ شیء-به-داده، به نام Entity Framework Core یا  EF Core صورت می‌گیرد.

در این فصل ما موارد زیر را پوشش خواهیم داد:

·        پایگاه‌های داده نوین

·        برپاسازی EF Core

·        تعریف مدل‌های EF Core

·        پرس و جو از مدل‌های EF Core

·        بارگذاری الگوها با EF Core

·        تغییر داده‌ها با EF Core

پایگاه‌های داده نوین

دو دسته از پایگاه‌های داده پرکاربرد عبارتند از سامانه مدیریت پایگاه داده رابطه‌ای یا RDMS[14] و پایگاه‌های داده NoSQL. نمونه‌ای از پایگاه‌هایی که به دسته اول تعلق دارند عبارتند از  Microsoft SQL Server، PostgreSQL، MySQL، و SQLite و نمونه‌هایی از دسته دوم؛ Microsoft Azure Cosmos DB، Redis، MongoDB، Apache Cassandra.

تمرکز این فصل بر روی پایگاه‌های رابطه‌ای مثل SQL Server و SQLite خواهد بود. اگر تمایل دارید درباره پایگاه‌های داده NoSQL، مثل Cosmos DB  و MongoDB و چگونگی استفاده از آنها در EF Core بیشتر یاد بگیرید، پیشنهاد می‌کنم به آدرس‌های زیر رجوع کنید:

      Welcome to Azure Cosmos DB: https://docs.microsoft.com/en-us/azure/cosmos-db/introduction

      Use NoSQL databases as a persistence infrastructure: https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/microservice-ddd-cqrs- patterns/nosql-database-persistence-infrastructure

      Document Database Providers for Entity Framework Core: https://github.com/BlueshiftSoftware/EntityFrameworkCore

 

چهارچوب‌های Entity موروثی

Entity Framework یا (EF) ابتدا در سال 2008 بعنوان بخشی از  .NET Framework 3.5 بیرون آمد. مایکروسافت متوجه شد برنامه‌نویسان به ابزارهای نگاشت شیء-رابطه یا ORM[15] خیلی علاقه دارند، و از همان زمان نیز EF درحال دگرگونی بوده.

ابزارهای ORM از تعریف یک نگاشت برای نسبت دادن ستون‌های یک جدول به ویژگی‌های یک کلاس استفاده می‌کنند. سپس، برنامه‌نویس بجای اینکه بصورت مستقیم با پایگاه‌های داده یا جداول کار کند، می‌تواند با اشیائی از گونه‌های مختلف کار کند.

آخرین نسخه EF که در .NET Framework قرار داشت Entity Framework 6 بود.  EFیک چهارچوب جاافتاده و باثبات است که برای تعریف مدل‌هایِ وراثت و دیگر ویژگی‌های پیشرفته از EDMX (فایل XML) پشتیبانی می‌کند.

EF 6.3 و بالاتر بعنوان یک پکیج جداگانه از .NET Framework استخراج شدند، تا بتوانند در .NET Core 3.0 و بالاتر، از جمله .NET 5، پشتیبانی شوند. این باعث می‌شود تا پروژه‌های موجود، مثل برنامه‌ها و سرویس‌های  وب، بتوانند بر روی سکوهای متعدد حمل و اجراء شوند. بااینحال EF6 را باید یک تکنولوژی موروثی بحساب آورد، زیرا برای اجراء روی سکوهای متعدد با محدودیت‌هایی روبرو است و هیچ ویژگی جدیدی نیز به آن اضافه نخواهد شد.

 اطلاعات بیشتر: برای اطلاعات بیشتر درمورد Entity Framework 6.3 و پشتیبانی‌ آن در .NET Core 3.0 و بالاتر به این آدرس رجوع کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

برای استفاده از EF در پروژه‌های .NET Core 3.0 و بالاتر، شما باید در فایل پروژه خودتان به آن یک ارجاع پکیج بدهید:

Description: Description: <PackageReference Include="EntityFramework" Version="6.4.4" />

روش‌های خوب: تنها اگر مجبور هستید از EF6 موروثی استفاده کنید. این کتاب درباره توسعه برنامه‌های مُدرن چند-سکویی است، بنابراین در باقی این فصل ما تنها به EF Core خواهیم پرداخت. در این‌صورت، نیازی به ارجاع پکیج در فایل پروژه نخواهد بود.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image003.png

Entity Framework Core

EF Core، که حقیقتاً چند-سکویی است، با EFهای موروثی متفاوت است. هرچند در ظاهر نام آنها شبیه هم هستند، ولی شما باید آگاه باشید که این نسخه جدید از چه لحاظ با EF6 متفاوت است. مثلاً EF Core علاوه بر RDBMSهای سنتی از پایگاه‌های داده مُدرنِ کلاد-پایه (cloud-based) غیررابطه‌ای و بدون-طرح (schema-less)، نظیر Microsoft Azure Cosmos DB، و  MongoDBنیز پشتیبانی می‌کند.

EF Core 5.0 بر روی سکوهایی اجراء می‌شود که از .NET Standard 2.1 پشتیبانی می‌کنند، یعنی .NET Core 3.0و 3.1، و همینطور  .NET 5. این نسخه  بر روی سکوهای .NET Standard 2.0 ، نظیر .NET Framework 4.8، اجراء نمی‌شود.

 اطلاعات بیشتر: برای کسب اطلاعات بیشتر درباره طرح‌های آتی تیم EF Core، شما می‌توانید به این آدرس رجوع کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

در EF Core 5.0 بهسازی‌های فراوانی انجام شده که نمی‌توان همه آنها را در این فصل پوشش داد. من بر روی موضوعات اساسی، و برخی مطالب جالب که هر برنامه‌نویس .NET باید آنها را بداند، تمرکز خواهم کرد.

 اطلاعات بیشتر: برای اطلاع از کلیه ویژگی‌های جدید EF Core 5 به این آدرس رجوع کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

استفاده از یک فایل نمونه پایگاه رابطه‌ای

به منظور یادگیری چگونگی کار با RDBMS (پایگاه‌های رابطه‌ای) در .NET، مفید خواهد بود که یک فایل نمونه داشته باشیم تا بتوانید بر روی آن تمرین کنیم، فایلی که زیاد پیچیده نباشد و مقدار قابل قبولی رکورد‌ نیز در آن موجود باشد. مایکروسافت چندین پایگاه داده نمونه را ارائه داده که بیشتر آنها زیاد از حد برای کار ما پیچیده‌اند، بنابراین به جای آنها از یک پایگاه داده قدیمی استفاده می‌کنیم که در دهه 1990 بیرون آمد و Northwind نام دارد.

بیایید به نمودار پایگاه‌داده Northwind نگاهی بی‌اندازیم. همانطور که ما در طول این کتاب برنامه خودمان را بیشتر توسعه می‌دهیم، شما نیز می‌توانید مجدداً به این نمودار رجوع کنید:

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image064.png

شکل 11.1: جدول‌های پایگاه Northwind به همراه رابطه‌های آن.

برای ادامه مطالعه این فصل، با مراجعه به این آدرس، نسخه PDF آن را تهیه فرمایید.

 

28/11/99

 


فصل 12

04/12/99

 

پرس‌وجو و تغییر داده‌ها با استفاده از LINQ

این فصل درباره زبان پرس‌جوی یکپارچه، یا به اختصار LINQ[16]، است. لینک عبارت است از یک سری گسترش‌های زبان، که برنامه‌نویس را قادر می‌کند با دنباله‌ای از اقلام کار کند، و سپس آنها را فیلتر و مرتب کرده، نتیجه را بصورت خروجی‌های مختلف ارائه کند.

ما در این فصل موضوعات زیر را پوشش خواهیم داد:

·        نوشتن پرس‌وجوهای LINQ

·        کار با مجموعه‌ها با استفاده از LINQ

·        استفاده از LINQ در EF Core

·        شیرین کردن نحوِ LINQ با شِکَر نحوی

·        استفاده از چندین ریسه در LINQ موازی

·        ایجاد متدهای گسترش LINQ

·        کار با LINQ to XML

نوشتن  پرس‌وجو‌های LINQ

هرچند ما در فصل 11 چند پرس‌وجوی LINQ را نوشتیم، ولی تمرکز اصلی ما این نبود، و من به درستی توضیح ندادم که LINQ چگونه کار می‌کند، ولی حالا بیایید تا به این موضوع بپردازیم.

LINQ چندین بخش دارد، که برخی از آنها لازم، و برخی نیز اختیاری هستند:

·        متدهای گسترش (لازم). اینها شامل Where، OrderBy، و Select می‌شوند.

·        فراهم‌آورندگان LINQ (لازم): اینها شامل LINQ to Objects، LINQ to Entities، LINQ to XML، LINQ to Odata، و  LINQ to Amazon می‌شوند. اینها هستند که برای گونه‌های مختلف  داده‌ها،‌ عملیات LINQ استاندارد را به دستورات مشخصی تبدیل می‌کنند.

·        عبارات لاندا (اختیاری): به منظور ساده‌تر کردن فراخوانی متدهای گسترش LINQ، می‌توان از اینها بجای فراخوانی‌ متدهای نام‌دار استفاده کرد.

·        نحو ساختِ پرس‌وجوی لینک[17] (اختیاری): اینها شامل from، in، where، orderby، descending و select هستند. اینها کلیدواژه‌های C# هستند که نام مستعاری برای برخی از متدهای گسترش LINQ هستند، و استفاده از آنها می‌تواند نوشتن پرس‌وجوها را آسانتر کند، خصوصاً هنگامی که شما از قبل با زبان‌های پرس‌وجوی دیگری مثل SQL آشنایی دارید.

هنگامی که برنامه‌نویسان برای اولین‌بار با LINQ مواجه می‌شوند، اغلب خیال می‌کنند که لینک در ” نحو ساخت پرس‌وجوی“ آن خلاصه می‌شود، ولی جالب است بدانید این یکی از بخش‌های لینک است که استفاده از آن اختیاری است!

گسترش دنباله‌ها با کلاس‌های قابل‌شمارش

متدهای گسترش LINQ، مثل Where و Select، توسط یک کلاس‌ ایستای قابل‌شمارش به هر گونه‌، که دنباله (sequence) نامیده می‌شود، و رابط IEnumerable<T> را پیاده‌سازی می‌کند، الحاق می‌شوند.

برای مثال، یک آرایه‌ از هر گونه‌ای که باشد کلاس IEnumerable<T> را پیاده‌سازی می‌کند، که T مشخص کننده گونه اقلامی است که در آرایه ذخیره می‌شوند، بنابراین کلیه آرایه‌ها از لینک به پرس‌وجو (LINQ to query)، و تغییر داده‌ها توسط آن پشتیبانی می‌کنند.

کلیه گردایه‌های جنریک، نظیر List<T>، Dictionary<Tkey, Tvalue>، Stack<T>،  و  Queue<T>همه IEnumerable<T> را پیاده‌سازی می‌کنند، بنابراین آنها می‌توانند توسط LINQ مورد پرس‌وجو قرار گیرند و داده‌های آنها تغییر داده شود.

Enumerable بیش از 45 متد گسترش را تعریف کرده که در جدول زیر خلاصه شده‌اند:

برای ادامه مطالعه این فصل، با مراجعه به این آدرس، نسخه PDF آن را تهیه فرمایید.

 


فصل 13

09/12/99

 

بهبود سرعت و مقیاس‌پذیری برنامه‌ها توسط چندکارگی

این فصل درباره این موضوع است که با انجام کارهایی که همزمان انجام می‌گیرند، سرعت، مقیاس‌پذیری، و بهره‌وری برنامه‌ها را افزایش دهیم.

این فصل موضوعات زیر را پوشش می‌دهد:

·        پروسه‌ها، ریسه‌ها و کارها

·        نظارت بر سرعت و مصرفِ منابع

·        اجرای کارها بصورت غیرهمزمان

·        همزمان‌سازی دسترسی به منابع مشترک

·        Async و await

پروسه‌ها، ریسه‌ها، و کارها

همه برنامه‌های کنسولی که تا اینجا ایجاد کردیم، همه یک پروسه (process) هستند. هر پروسه دارای منابعی مثل حافظه و ریسه‌هایی است که به آن اختصاص یافته. یک ریسه (thread) برنامه شما را، عبارت به عبارت، اجراء می‌کند. طبق پیش‌فرض، هر پروسه تنها یک ریسه دارد، و هنگامی که ما می‌خواهیم چند کار (task) را با هم انجام دهیم، این می‌تواند مشکل‌ساز شود. ریسه‌ها همچنین مسئول پی‌گیری چیزهایی مثل اعتبار‌سنجی کاربر فعلی و تمام قواعد بین‌المللی‌سازی (internationalization rules) هستند که باید برای زبان و ناحیه جاری از آن پیروی شود.

ویندوز و دیگر سیستم‌عامل‌های مدرن، از چندکارگی نوبتی یا قبضه‌ای (preemptive multitasking) استفاده می‌کنند، که اجراء موازی کارها را شبیه‌سازی می‌کند. در این روش، با اختصاص یک قطعه زمانی (time slice) به هر ریسه، زمانِ پردازنده میان ریسه‌ها تقسیم می‌شود. هنگامی که قطعه زمانی ریسه‌ جاری به پایان برسد، موقتاً تعلیق می‌شود. سپس پردازنده اجازه می‌دهد تا ریسه دیگری در یک قطعه زمانی اجراء شود.

هنگامی که ویندوز می‌خواهد از یک ریسه به ریسه دیگر برود، زمینه (context) ریسه جاری را ذخیره کرده و زمینه ریسه بعدی که در صف قرار دارد و قبلاً ذخیره شده را مجدداً بارگذاری می‌کند. تکمیل اینکارها هم به زمان، و هم به منابع نیاز دارد.

تمام ریسه‌ها دارای دو ویژگی بنام‌های Priority (تقدم) و ThreadState  (وضعیت‌ ریسه) هستند. همچنین، همانطور که در نمودار زیر دیده می‌شود، کلاسی بنام ThreadPool هست که مسئول مدیریت مخزنی (pool) از ریسه‌های کارگرِ پس‌زمینه است:

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image065.png

شکل 13.1: کلاس‌ Thread و دیگر گونه‌های مرتبط.

اگر شما بعنوان برنامه‌نویس تعداد کمی از کارهای پیچیده را دارید و می‌خواهید کنترل کاملی بر روی آنها داشته باشید، آنگاه می‌توانید نمونه‌های انفرادی Thread را ایجاد کرده و آنها را مدیریت کنید. اگر یک ریسه اصلی و چند کار سبک دارید که می‌خواهید در پس‌زمینه (background) اجراء شوند، آنگاه می‌توانید نمونه‌هایی از نماینده‌ها (delegate) را ایجاد کنید که به این کارها اشاره می‌کنند. این کارها بصورت متدهایی پیاده‌سازی می‌شوند که در صف قرار دارند، و بصورت خودکار به ریسه‌هایی که در مخزن ریسه (thread pool) قرار دارند اختصاص می‌یابند.

 اطلاعات بیشتر: برای کسب اطلاعات بیشتر درباره مخزن ریسه به این آدرس رجوع کنید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

ممکن است ریسه‌ها برای دسترسی به منابع مشترک، مثل فایل‌ها و اشیاء پایگاه‌داده، مجبور شوند منتظر بمانند یا با یکدیگر رقابت کنند.

بسته به کارِ مربوطه، دو برابر کردن ریسه‌ها (کارگرها) برای انجام یک کار باعث نمی‌شود تا مدت زمان تکمیل آنها نصف شود. در واقع، حتی ممکن است مدت انجام کار افزایش یابد.

روش‌های خوب: هیچ وقت فرض را بر این نگذارید که افزایش ریسه‌ها موجب افزایش سرعت برنامه می‌شود! ابتدا برنامه خودتان را تک ریسه‌‌ای بسازید و سرعت آن را اندازه بگیرید، و سپس آن را طوری بسازید که از چند ریسه استفاده کند و مجدداً سرعت آن را بررسی کنید. همچنین باید شرایط محیطی را نیز در نظر داشته باشید، و برنامه خودتان را تا آنجا که امکان دارد در شرایطی آزمایش کنید که قرار است در آنجا مورد استفاده قرار گیرد.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image003.png

نظارت بر روی سرعت برنامه و مصرفِ منابع

پیش از اینکه تلاش کنیم برنامه‌های خودمان را بهبود ببخشیم، ابتدا نیاز داریم سرعت و کارآیی آنها را اندازه بگیریم تا بعداً معیار مشخصی برای میزان بهبودی آنها داشته باشیم.

برای ادامه مطالعه این فصل، با مراجعه به این آدرس، نسخه PDF آن را تهیه فرمایید.

 

 


فصل 14

15/12/99

 

معرفی برنامه‌های عملی C# و .NET

 

این بخش از کتاب درباره برنامه‌های عملی C# و .NET است. شما یاد خواهید گرفت که چگونه پروژه‌‌های چند-سکویی ایجاد کنید، از جمله وب‌سایت‌ها، سرویس‌های وب. شما همچنین یاد می‌گیرید که چگونه با استفاده از یادگیری ماشین (machine learning) می‌توانید هوشمندی را به برنامه‌های خود اضافه کنید.

مایکروسافت سکوهای ساخت برنامه‌ را مدل‌های برنامه (App Models) نام‌گذاری کرده.

من توصیه می‌کنم که شما این فصل و فصل‌ آتی را خوب دنبال کنید، زیرا در فصل‌ بعد به پروژه‌هایی اشاره می‌شود که در فصل‌های قبلی ساخته شده‌اند، و برای دنبال کردن مسائل مشکل‌تر، لازم است شما با موارد قبلی آشنا باشید.

این فصل موارد زیر را پوشش می‌دهد:

·        مدل‌های برنامه برای C# و .NET

·        خصوصیات جدید در ASP.NET Core

·        سیگنالار (SignalR)

·        بِلیزور (Blazor)

·        ساخت یک مدل موجودیت داده برای Northwind

مدل‌های برنامه برای C# و .NET

بدلیل اینکه این کتاب درباره C# و .NET 5 است، ما مدل‌هایی را یاد می‌گیریم که از آنها برای  ساختن برنامه‌های عَملی استفاده می‌شود که در فصل آتی با آنها روبرو می‌شویم.

 اطلاعات بیشتر: مایکروسافت رهنمودهای مفصلی درباره پیاده‌سازی مدل‌های برنامه، نظیر برنامه‌های وب ASP.NET، برنامه‌های موبایل Xamarin، و برنامه‌های UWP دارد، که شما می‌توانید با مراجعه به این آدرس آنها را بخوانید.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image002.png

ساخت وب‌سایت‌ها با استفاده از ASP.NET Core

وب‌سایت‌ها از چندین صفحه وب ساخته‌ شده‌اند که یا بصورت ایستا از سرور بارگذاری می‌شوند، یا توسط یکی از تکنولوژی‌های سرویس‌دهنده، نظیر ASP.NET Core بصورت پویا تولید می‌شوند. یک مرورگر وب با استفاده از URLهایی که مشخص کننده هر صفحه هستند، یک تقاضای GET را به سرویس‌دهنده (سرور) می‌فرستد. همچنین این تقاضاها می‌توانند شامل POST، PUT، و DELETE نیز باشد.

در بسیاری از وب‌سایت‌ها، مرورگر وب بعنوان یک لایه نمایش در نظر گرفته می‌شود، که تقریباً همه پردازش‌ها از سوی سرویس‌دهنده صورت می‌گیرد. ممکن است برای پیاده‌سازی برخی از ویژگی‌های نمایشی، مقدار کمی جاوااسکریپت از سوی سرویس‌گیرنده اجراء شود.

ASP.NET Core تکنولوژی‌های متعددی برای ساختن وب‌سایت‌ها فراهم آورده:

·        صفحات ASP.NET Core Razor و کتابخانه‌های کلاس Razor: روش‌هایی برای تولید HTML برای وب‌سایت‌های ساده هستند. شما در فصل 15 با آنها بیشتر آشنا می‌شوید.

·        ASP.NET Core MVC: پیاده‌سازی الگو طراحی (design pattern) مدل-نما-کنترلر (MVC) هستند که برای توسعه وب‌سایت‌های پیچیده طرفدارن زیادی دارد.

·        Blazor: به شما اجازه می‌دهد اجزاء (components) سرویس‌دهنده یا سرویس‌گیرنده و رابط‌های کاربری را بجای JavaScript با C# بسازید.

ساخت وب‌سایت‌ها با استفاده از یک سیستم مدیریت محتوا

بیشتر وب‌سایت‌ها محتوای زیادی دارند، و اگر قرار باشد که هرباری که این محتوا تغییر می‌کند برنامه‌نویسان درگیر آن باشند، این مقیاس‌پذیری خوبی نخواهد داشت. یک سیستم مدیریت محتوا (CMS[18]) برنامه‌نویسان را قادر می‌کند تا با تعریف ساختار محتوا و یک سری الگوها، ثبات و سازگاری وب‌سایت را فراهم آورند. این باعث می‌شود مالک محتوا (صاحت وب‌سایت)، که یک فرد غیر-متخصص است، به آسانی بتواند مدیریت محتوای خودش را به دست بگیرد. آنها می‌توانند صفحات جدیدی را ایجاد کرده، و محتوای موجود را آپ‌دیت کنند.

برای ادامه مطالعه این فصل، با مراجعه به این آدرس، نسخه PDF آن را تهیه فرمایید.

 

 


فصل 15

21/12/99

 

ساخت وب‌سایت‌ها با استفاده از صفحات ASP.NET Core Razor

این فصل درباره ساختن وب‌سایت‌ها توسط معماری‌های مدرن HTTP روی سرویس‌دهنده‌هایی است که از ASP.NET Core استفاده می‌کنند. شما یاد خواهیم گرفت چگونه با استفاده از تکنولوژی ASP.NET Core Razor و .NET Core 2.0 وب‌سایت‌های ساده را ایجاد کنیم. کتابخانه کلاس Razor همراه با .NET Core 2.1 معرفی شدند.

در این فصل موضوعات زیر پوشش داده خواهند شد:

·        برنامه‌نویسی وب

·        ASP.NET Core

·        صفحات Razor

·        استفاده از Entity Framework Core با ASP.NET Core

·        استفاده از کتابخانه‌های کلاس Razor

·        پیکر‌بندی سرویس‌ها و لوله‌کشی درخواست HTTP

برنامه‌نویسی وب

برنامه‌نویسی وب با استفاده از HTTP[19] صورت می‌گیرد.

پروتکل HTTP

سرویس‌گیرنده‌ها (client)، که به عامل کاربر (user agent) نیز شناخته می‌شوند، برای ارتباط با یک سرویس‌دهنده وب، با استفاده از HTTP فراخوانی‌‌هایی را از روی‌شبکه انجام می‌دهند. به همین دلیل HTTP پایه وب است. بنابراین وقتی صحبت از برنامه‌ها یا سرویس‌های وب است، منظور ما این است که آنها برای ارتباط میان یک سرویس‌دهنده و یک سرویس‌گیرنده (که معمولاً یک مرورگر است) از HTTP استفاده می‌کنند.

سرویس‌گیرنده برای منبعی که به آن نیاز دارد، و معمولاً یک صفحه وب است، یک درخواست HTTP را به سرویس‌دهنده می‌فرستد. این درخواست به شکل یک URL[20] فرستاده می‌شود، و در جواب نیز سرویس‌دهنده یک پاسخ HTTP می‌فرستد:

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image066.png

شکل 15.1: یک درخواست و پاسخ HTTP.

شما می‌توانید از Google Chrome یا مرورگرهای دیگر برای ثبت درخواست‌ها و پاسخ‌ها استفاده کنید.

 

روش‌های خوب: برای بیشتر سیستم‌عامل‌ها مرورگر Google Chrome در دسترس است، و دارای ابزارهای توکارِ قدرتمند برای برنامه‌نویسان می‌باشد، بنابراین انتخاب خوبی برای آزمایش وب‌سایت‌ها است. همیشه برنامه‌های وب‌ خودتان را با کروم و حداقل دو مرورگر دیگر، مثل فایرفاکس و سافاری، آزمایش کنید. مرورگر Edge مایکروسافت در 2019 برای نمایش صفحات بجای استفاده از موتور نمایش خودش از Chromium استفاده کرد، بنابراین اگر برنامه‌های شما با کروم جواب ‌دهد، با Edge نیز جواب می‌دهد. Internet Explorer بیشتر در داخل سازمان‌ها و اینترانت‌ها (intranets) بکار می‌رود.

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image003.png

بیایید با استفاده از کروم چند درخواست HTTP را انجام دهیم:

1.    Google Chrome را اجراء کنید.

2.    برای مشاهده ابزارهای برنامه‌نویسی، دکمه F12 را فشار دهید.

3.    روی تب Network کلیک کنید. کروم باید فوراً شروع به ثبت ترافیک شبکه میان مرورگر و سرویس‌دهنده‌های وب کند:

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image067.png

شکل 15.2: کروم درحال ثبت ترافیک شبکه است

4.    در محل وارد کردن آدرس کروم، URL زیر را وارد کنید:

https://dotnet.microsoft.com/learn/aspnet

5.    در پنجره Developer tools، در فهرست درخواست‌های ثبت‌شده، به بالای لیست بروید و روی اولین مورد کلیک کنید، در اینصورت در قسمت document چیزی شبیه زیر نمایش داده می‌شود:

Description: Description: C:\Users\kami\Documents\My Books\C# 9 and .NET 5\sum_files\image068.png

شکل 15.3: درخواست‌های ثبت‌شده.

برای ادامه مطالعه این فصل، با مراجعه به این آدرس، نسخه PDF آن را تهیه فرمایید.


 

Like: ,